Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Facebook Pinnwand realisieren

  1. #1
    Unregistriert
    Gast

    Standard Facebook Pinnwand realisieren

    Hallo,

    Ich versuche gerade die Facebook Pinnwand durch ein SQL Statement zu realisieren. Dabei habe ich 3 Tabellen (als Beispiel) :

    Beitrag (userid, Zeit)
    Gefaelltmir (userid, Zeit)
    Foto (userid, Zeit)

    Die Tabellen sind natürlich nur zu testzwecken derartig aufgebaut um euch zu zeigen was ich machen möchte: und zwar möchte ich ähnlich wie bei Facebook für eine userid die letzten 5 Aktionen darstellen. D.h. Nicht 5 Beiträge, 5 gefällt mir und 5 Fotos sondern die letzten 5 Aktionen aus allen Tabellen (natürlich nach der Zeit absteigend).

    Momentan setze ich 3 sqls ab, schreibe das Ergebnis in ein Array, sortiere das in php und lösche alle Indizes die größer als 5 sind. Das ist aber weder schön noch perfomant. Außerdem möchte ich nun einen Offset wert mit einbeziehen -> um eine pagination zu realisieren ( zeige zuerst letzten 1-5 Aktionen und dann 6-10 usw). Am liebsten würde ich das alles in einem query realisieren..*

    Bin für jeden Tipp dankbar!
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Meister(in) Avatar von Teron Gerofied
    Registriert seit
    26.01.2008
    Ort
    serverraum
    Alter
    26
    Beiträge
    347
    Danke
    0
    Bekam 1 mal "Danke" in 1 Posting

    Standard AW: Facebook Pinnwand realisieren

    lol, um den Algorithmus der Pinnwand zu kopieren wirst du etwas länger brauchen, glaubs mir...
    PHP-Code:
    if(isset($this) || !isset($this)){ // that's the question... 

  3. #3
    König(in) Avatar von Grevas
    Registriert seit
    20.04.2009
    Ort
    In meiner Wohnung.
    Alter
    30
    Beiträge
    1.039
    Danke
    0
    Bekam 5 mal "Danke" in 5 Postings

    Standard AW: Facebook Pinnwand realisieren

    Zitat Zitat von Teron Gerofied Beitrag anzeigen
    lol, um den Algorithmus der Pinnwand zu kopieren wirst du etwas länger brauchen, glaubs mir...
    War schon überrascht, Teron hilft? Mal den Post anzeigen lassen und nun ist die Welt wieder in Ordnung


    Was du vorhast ist eigtl. gar nicht so schwer.
    So in etwa dürfts hinhauen (in der Annahme, dass die userid die gleiche sein soll und du auch danach filtern willst):
    Code:
    SELECT userid, zeit
    FROM ( 
      (SELECT userid, zeit FROM Beitrag)
        UNION ALL
      (SELECT userid, zeit FROM Gefaelltmir)
      ORDER BY zeit DESC
      LIMIT 0,5
    ) as actions
    WHERE userid = 1
    (ansonsten kannst die WHERE klausel einfach weglassen)

    Für die 3te Tabelle brauchst du natürlich noch ein UNION ALL.

    //P.S.
    hier ist der Datensatz mit dem ich getestet hab:
    Code:
    -- Adminer 3.3.3 MySQL dump
    
    SET NAMES utf8;
    SET foreign_key_checks = 0;
    SET time_zone = 'SYSTEM';
    SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
    
    DROP TABLE IF EXISTS `Beitrag`;
    CREATE TABLE `Beitrag` (
      `userid` int(11) NOT NULL,
      `zeit` date NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `Beitrag` (`userid`, `zeit`) VALUES
    (1,    '2005-01-01'),
    (1,    '2005-01-02'),
    (1,    '2005-01-05'),
    (1,    '2005-01-07');
    
    DROP TABLE IF EXISTS `Gefaelltmir`;
    CREATE TABLE `Gefaelltmir` (
      `userid` int(11) NOT NULL,
      `zeit` date NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    INSERT INTO `Gefaelltmir` (`userid`, `zeit`) VALUES
    (1,    '2005-01-07'),
    (1,    '2005-01-04'),
    (1,    '2005-01-02');
    
    -- 2011-12-11 23:56:45
    Geändert von Grevas (12.12.2011 um 00:58 Uhr) Grund: bekacktes forum kann kein UNIX. \r\n ftw?

  4. #4
    Unregistriert
    Gast

    Standard AW: Facebook Pinnwand realisieren

    Hallo grevas

    Vielen dank für deine Hilfe! Soviel ich weiß funktioniert Union aber nur wenn die Tabellen die gleiche Anzahl von Spalten + den gleichen Datentyp haben. Das ist aber bei mir nicht der Fall (nur im Beispiel oben zum leichteren Verständnis..

    Wie bekomme ich das jetzt hin?

    Danke!

  5. #5
    Unregistriert
    Gast

    Standard AW: Facebook Pinnwand realisieren

    Ok, fehlende Spalten kann ich mit NULL-Werten befüllen. Soweit so gut.
    Ausserdem habe ich herausgefunden, dass ich bei jedem einzelnen Select-Statement die Where
    Klausel brauche.

    Ein Problem habe ich noch: die Performance.
    Ich lese ja nun alle Sätze des Users (wegen der Where, die ich bei jedem Select hinzugefügt habe)
    aus, füge die Ergebnisse zusammen und setze dann meinen Offset und Limit Wert. Funktionieren
    tut das super, aber wenn der User pro Tabelle mehrere tausend Sätze hat und ich nur Offset = 0
    und Limit = 2 will, sucht er ja trotzdem erst mal alle oder nicht?

    Wie kann ich das Problem umgehen?

  6. #6
    König(in)
    Registriert seit
    07.02.2009
    Ort
    Leipzig
    Beiträge
    1.391
    Danke
    2
    Bekam 21 mal "Danke" in 20 Postings

    Standard AW: Facebook Pinnwand realisieren

    Denke auch an die Indizes deiner Tabellen. Je performanter Du diese setzt, umso schneller können Abfragen auch laufen. Außerdem hängt das hängt vom Datenbanksystem ab. Bei Oracle kann man für sowas prima temporäre Tabellen nutzen, bei MySQL (ISAM) eher nicht.

  7. #7
    Unregistriert
    Gast

    Standard AW: Facebook Pinnwand realisieren

    Da gebe ich dir Recht, threadi!
    Aber ist das wirklich nicht anders möglich, als erst alle Zeilen zu lesen und dann einzuschränken?
    Bin für jede Idee dankbar!

  8. #8
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Facebook Pinnwand realisieren

    Ich realisiere soetwas mit einer zusätzlichen Tabelle `dashboard` => `id` (Pk, AI), `referredTable` (Index), `referredPkValue`(Index), `datetimeOfAdd`(Index)
    Wird jetzt ein neuer Kommentar auf die Pinnwand geschrieben wird der ganz normal gespeichert, zusätzlich aber ein Eintrag in `dashboard` erstellt mit Tabellenname der Kommentar-Tabelle, ID des neues Kommentars und dem Zeitpunkt.

    Das ist zwar etwas zusätzlich Datenhaltung, aber Speicherplatz kostet heute nix mehr, die Abfrage wird viel schneller als so nen UNION-Gedöns über X-Tabellen und vor allem kann ich im Dashboard jegliche Aktivität festhalten die passiert, also jeden Neueintrag für jede Tabelle der Datenbank.
    Andernfalls müsstest du, sobald irgendeine Tabelle dazu kommt die im Dashboard angezeigt werden soll, gleich wieder deine UNION-Abfrage erweitern.

    Hier mal ein älterer Thread von mir zu etwa dem Thema:
    http://www.php.de/software-design/78...ern-n-1-a.html
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  9. #9
    Unregistriert
    Gast

    Standard AW: Facebook Pinnwand realisieren

    Hallo Sinnlos,

    interessanter Ansatz Und wie würde dann die Abfrage aussehen?
    Sollte ja mit einem Join machbar sein. Nur ich weiß grad nicht,
    wie ich das hinbekomme, weil der Name der Tabelle ja in einer Spalte
    steht..

    Wie würdest du das aufbauen?

    Danke sehr!

  10. #10
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Facebook Pinnwand realisieren

    Ich frage für mein Dashboard die eigentlichen Einträge gar nicht selber ab, sondern speichere in meiner dashboard-Tabelle eine zusätzliche Spalte mit einem Kommentar. Bei einem neuen Pinnwandeintrag kann das z.B. sowas sein "Manfred Mustermann hat an deine Pinnwand geschrieben: [ersten 80 Zeichen des Beitrags]..."
    D.h. ich benötige den Eintrag auf den referenziert wird nicht für mein Dashboard.
    Andernfalls müsstest du wohl zusätzlich SELECTs raushauen um die Einträge selber noch zu holen. Bei vielen Tabellen mit vielen Datensätzen die beobachtet werden sollen und einer im Verhältnis gesehen kleinen Ergebnismenge bleibt das trotzdem performanter.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

Ähnliche Themen

  1. Likes24.de Facebook Pinnwand Sprüche
    Von Likes24de im Forum Eure Homepages und Foren - Vorstellung und Bewertungen
    Antworten: 4
    Letzter Beitrag: 16.05.2012, 17:44
  2. ist das nur mit Flash zu realisieren ?
    Von mikeHH im Forum Flash Forum
    Antworten: 10
    Letzter Beitrag: 28.10.2011, 14:49
  3. Chat realisieren
    Von goldeneye im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 21.06.2011, 15:22
  4. Pinnwand
    Von davidos_no.1 im Forum Off Topic und Quasselbox
    Antworten: 9
    Letzter Beitrag: 24.09.2007, 17:21
  5. ich suche ein kleines Pinnwand-board
    Von Gast im Forum Webanwendungen - Webapplikationen
    Antworten: 0
    Letzter Beitrag: 30.10.2006, 22:37

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •