Aufbau Twitter / Mikroblog / Facebook

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Aufbau Twitter / Mikroblog / Facebook

    Hallo,

    ich möchte sowas in der Art wie Twitter entwickeln (ein sog. Mikroblog).

    An sich nicht weiter schwer, es soll aber erweitere Features haben wie z.B. bei Facebook wo man auf Postings antworten kann.

    Für Unwissende: Eine Art Gästebuch wo man auf Einträge eben antworten kann (fast wie ein Miniforum).

    Neben jedem Eintrag soll aber auch gleich stehen, wieviele Antworten bereits vorhanden sind (ev. sollte man es auch so abfragen können, dass auch neue Antworten in alten Beiträgen "oben" mit erscheinen).

    Idee 1 (2 Tabellen):

    Tabelle "postings":

    - threadID
    - userID
    - beitrag
    - zeit

    Tabelle "antworten":

    - antwortID
    - threadID
    - userID
    - beitrag
    - zeit

    Hier müßte man also mit Joins & Co. arbeiten.

    Idee 2 (1 Tabelle):

    - threadID
    - antwortID
    - userID
    - beitrag
    - zeit

    antwortID wird nur befüllt wenn es sich um eine Antwort handelt. Weiß aber nicht inwiefern das alles dann zu unflexibel wird.

    Hat jemand Ideen was die sinnvollste Lösung für diese Anwendung wäre?

    Danke,
    Truncate
    Zuletzt geändert von Truncate; 13.01.2009, 15:30.

  • #2
    Alles in eine Tabelle.
    Posting ist Posting, ob es eine Antwort ist ist nur eine Eigenschaft.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Echt? Also ich kann dann auch wie gewünscht die Anzahl der Antworten neben den Postings in einer (!) Abfrage mit anzeigen lassen?

      Ich hatte wegen dem Aufbau eines Forum hier glaub auch schon mal gefragt und da wurde "auf jeden Fall einzelne Tabellen" gesagt. Hm...

      Kommentar


      • #4
        Posting und Antwort ist aber was anderes wie Thread und Posting.

        Kommentar


        • #5
          Ich glaub langsam es geht doch nicht alles in einer Tabelle:

          - eintragID
          - antwortID (mit Bezug auf eintragID)
          - username
          - beitrag
          - zeit

          eintragID ist ja sicherlich INT und fortlaufend...

          Auflistung aller Einträge (ohne Antworten) erfolgt also z.B. mittels:

          SELECT * FROM tab WHERE antwortID=''

          Wie soll jetzt z.B. eine Antwort auf eintragID 100 gespeichert werden?

          fortlaufende id|100|hans|ja stimmt...|zeit ?

          Die Antwort hat also dann gleichzeitig eine eigene ID durch eintragID?

          Und wie listet man jetzt alle Einträge OHNE Antworten auf, schreibt aber hinter jeden Eintrag wieviele Antworten es schon gibt?

          Meine das in etwa so:

          hans: bla llalalalalal - 0 antworten
          dieter: bla llalalalalal - 1 antworte
          peter: bla llalalalalal - 0 antworten
          jochen: bla llalalalalal - 3 antworten

          Kommentar


          • #6
            SELECT a.*, COUNT(b.antwort_id) as cnt FROM tabelle a LEFT JOIN tabelle b ON a.eintrag_id = b.antwort_id WHERE a.eintrag_id = 0 GROUP BY (a.eintrag_id)

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Original geschrieben von ghostgambler
              SELECT a.*, COUNT(b.antwort_id) as cnt FROM tabelle a LEFT JOIN tabelle b ON a.eintrag_id = b.antwort_id WHERE a.eintrag_id = 0 GROUP BY (a.eintrag_id)
              Das ist jetzt aber die Lösung bei Verwendung von 2 Tabellen oder?

              Kommentar


              • #8
                Nein. Es wird zwei Mal die gleiche Tabelle referenziert.

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Hm das liefert bei mir immer 0 Ergebnisse.

                  Tabelle "msg":

                  id
                  antwortid
                  ...

                  Code:
                  SELECT
                  
                  a.*, COUNT(b.antwortid) AS cnt
                  
                  FROM
                  
                  msg a
                  
                  LEFT JOIN
                  
                  msg b ON a.id = b.antwortid
                  
                  WHERE
                  
                  a.id = 0
                  
                  GROUP BY (a.id)

                  Kommentar


                  • #10
                    Wie ist deine Tabellenstruktur, was sind die eingetragenen Daten?
                    (Am besten ein SQL-Dump, bevor du anfängst irgendwas zu tippen.)

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      Code:
                      -- 
                      -- Tabellenstruktur für Tabelle `msg`
                      -- 
                      
                      CREATE TABLE `msg` (
                        `id` int(10) unsigned NOT NULL auto_increment,
                        `antwortid` int(10) unsigned NOT NULL,
                        `userid` smallint(5) unsigned NOT NULL,
                        `inhalt` text collate latin1_general_ci NOT NULL,
                        `zeit` datetime NOT NULL,
                        `public` enum('ja','nein') collate latin1_general_ci NOT NULL,
                        PRIMARY KEY  (`id`)
                      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;
                      
                      -- 
                      -- Daten für Tabelle `msg`
                      -- 
                      
                      INSERT INTO `msg` (`id`, `antwortid`, `userid`, `inhalt`, `zeit`, `public`) VALUES 
                      (1, 0, 1, 'heute ist ein schöner tag', '2009-01-13 15:57:11', 'ja'),
                      (2, 0, 2, 'mir ist kalt', '2009-01-13 15:57:34', 'ja'),
                      (3, 1, 1, 'wo sind meine socken', '2009-01-13 15:57:57', 'ja');
                      Bei der Ausgabe müßte also id 1 + 2 aufgelistet werden und bei id 1 eben "1 Antwort" oder sowas.

                      Abfragen tu ich im Moment so:

                      Code:
                      SELECT 
                      
                      *,
                      TIME_FORMAT(zeit,'%H:%i') AS termin,
                      stammdaten.username AS username
                      
                      FROM
                      
                      msg
                      
                      LEFT JOIN
                      
                      stammdaten ON msg.userid=stammdaten.userid 
                      
                      WHERE
                      
                      antwortid=0
                      
                      AND
                      
                      public='ja'
                      
                      ORDER BY zeit
                      
                      DESC LIMIT 25
                      Die Abfrage holt noch zur Userid den Usernamen.

                      Die Antworten muss ich derzeit noch in einer Schleife holen:

                      Code:
                      SELECT
                      
                      COUNT(antwortid)
                      
                      FROM
                      
                      msg
                      
                      WHERE
                      
                      antwortid='".$row['id']."'
                      
                      LIMIT 1
                      Zuletzt geändert von Truncate; 13.01.2009, 18:59.

                      Kommentar


                      • #12
                        Ich hab gerüchteweise gehört, dass es Sinn macht zu verstehen was man kopiert.

                        So funktioniert es wie gewünscht:
                        SELECT a.*, COUNT(b.antwortid) AS cnt
                        FROM msg a LEFT JOIN msg b ON a.id = b.antwortid
                        WHERE a.antwortid = 0
                        GROUP BY (a.id)

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar

                        Lädt...
                        X