[PHP] Newsfeed

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Atkaz, 16. Februar 2011 .

  1. 16. Februar 2011
    Newsfeed

    Moinsen an alle,

    ich sitze hier wieder mal und hab ein Problem. Ich bin dabei einen Newsfeed(nennt man das so?) zu erstellen, wo dem einzelnen User die neusten Neuigkeiten angezeigt werden sollen. Nun sind die mir bekannten Wege so etwas zu realisieren wie folgt:

    a) Auslesen der einzelnen Tabellen wie z.b User-Tabelle für die Statustmeldungen etc.(nicht wirklich effizient.)
    b) Erstellen einer seperaten Tabelle, die die ganzen Neuigkeiten speichert und aus der dann die aktuellen ausgelesen werden (bei jedem insert muss also auf zwei Tabellen zugegriffen werden)

    Irgendwie gefallen mir diese Ansätze aber nicht. Würde mich freuen wenn jemand vorschläge für hätte.

    Sollten mir neue Ideen einfallen, werden diese hier geposten.

    MfG
    Atkaz
     
  2. 16. Februar 2011
    AW: Newsfeed

    Meinst du so wie z.B. auf Facebook? Dann würde ich 2 Tabellen mit OneToMany Relation wählen ala:

    Code:
    User:
    - id
    - name
    ...
    
    
    Status:
    - id
    - user_id
    - timestamp
    - text
     
  3. 17. Februar 2011
    AW: Newsfeed

    Hab mich nun entschieden mehre Tabellen auszulesen. Stehe wieder vor einem Problem.

    Ich habe Folgende Tabellen:

    User__Freunde (ID,User_ID,Freund_ID,Freund_Username,Bez_Art)
    User__Status (ID,User_ID,Msg,Datum)

    nun soll der aktuelle Status von allen Freunden ausgelesen werden.
    Mein Sctipt sieht wie folgt aus:

    PHP:
    $status_laden  mysql_query ( "SELECT *
        FROM User__Status
            INNER JOIN
        User__Freunde ON User__Freunde.Freund_ID = User__Status.User_ID
            WHERE 
         User__Freunde.User_ID = '
    $User_ID '
        ORDER BY User__Status.Datum DESC"
    );
    Beide Datenbanken enthalten jeweils zwei Einträge die sich miteinander verknüpfen lassen. Das Problem besteht jetzt darin, dass wenn ich ich die Daten mittels eine While Schleife auslesen will, die schleife 4 mal durchlaufenwird (2X2) und die daten werden dementsprechned doppelt ausgegeben. Gibt es eine möglichkiet das ganze zu gruppieren?

    Mfg
    Atkaz
     
  4. 19. Februar 2011
    AW: Newsfeed

    Hm, wieso sollte er denn 4 Datensätze holen?
    Ich habe gerade testweise eine Datenbank erstellt:
    Code:
    --
    -- Datenbank: `test`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `status`
    --
    
    CREATE TABLE IF NOT EXISTS `status` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `user_id` int(10) unsigned NOT NULL,
     `message` text CHARACTER SET latin1 NOT NULL,
     `timestamp` int(10) unsigned NOT NULL,
     PRIMARY KEY (`id`),
     KEY `user_id` (`user_id`),
     KEY `timestamp` (`timestamp`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
    
    --
    -- Daten für Tabelle `status`
    --
    
    INSERT INTO `status` (`id`, `user_id`, `message`, `timestamp`) VALUES
    (1, 1, 'Hallo Welt, Test', 0),
    (2, 1, 'Foo Bar', 0),
    (3, 2, 'Ein Status', 0),
    (4, 2, 'Noch ein Status', 0),
    (5, 3, 'Auch für 3', 0),
    (6, 3, 'Und noch einer für 3', 0);
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `user`
    --
    
    CREATE TABLE IF NOT EXISTS `user` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `name` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
     PRIMARY KEY (`id`),
     UNIQUE KEY `name` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
    
    --
    -- Daten für Tabelle `user`
    --
    
    INSERT INTO `user` (`id`, `name`) VALUES
    (1, 'Test A'),
    (2, 'Test B'),
    (3, 'Test C');
    
    -- --------------------------------------------------------
    
    --
    -- Tabellenstruktur für Tabelle `user_friend`
    --
    
    CREATE TABLE IF NOT EXISTS `user_friend` (
     `user_id` int(10) unsigned NOT NULL,
     `friend_id` int(10) unsigned NOT NULL,
     `type` tinyint(3) unsigned NOT NULL,
     PRIMARY KEY (`user_id`,`friend_id`),
     KEY `friend_id` (`friend_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    --
    -- Daten für Tabelle `user_friend`
    --
    
    INSERT INTO `user_friend` (`user_id`, `friend_id`, `type`) VALUES
    (1, 2, 0),
    (2, 1, 0),
    (2, 3, 0),
    (3, 2, 0);
    
    --
    -- Constraints der exportierten Tabellen
    --
    
    --
    -- Constraints der Tabelle `status`
    --
    ALTER TABLE `status`
     ADD CONSTRAINT `status_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    --
    -- Constraints der Tabelle `user_friend`
    --
    ALTER TABLE `user_friend`
     ADD CONSTRAINT `user_friend_ibfk_2` FOREIGN KEY (`friend_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
     ADD CONSTRAINT `user_friend_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
    Mein Test SQL:
    Code:
    SELECT *
    FROM status
    INNER JOIN user_friend ON user_friend.friend_id = status.user_id
    WHERE user_friend.user_id = 1
    ORDER BY status.timestamp DESC
    Ausgabe:
    Code:
    +----+---------+-----------------+-----------+---------+-----------+------+
    | id | user_id | message | timestamp | user_id | friend_id | type |
    +----+---------+-----------------+-----------+---------+-----------+------+
    | 3 | 2 | Ein Status | 0 | 1 | 2 | 0 |
    | 4 | 2 | Noch ein Status | 0 | 1 | 2 | 0 |
    +----+---------+-----------------+-----------+---------+-----------+------+
    Genauso sollte es auch sein. Von daher verstehe ich nicht, wie du auf 4 Zeilen kommst.
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.