Doppelte IDs beim SQL-Query

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

  • #16
    Natürlich ergibt das einen Sinn ...

    Wenn man die Nachricht anzeigt ich schreib schnell den Code damit mans versteht (bitte nicht meckern wenn er so nicht geschrieben wird - funktionieren tuts trotzdem)

    Der Benutzer ruft das Script auf mit der id 11 dann wird ausgelesen welche messageid es betrifft ...

    Code:
    $auslesen=mysql_query("SELECT * FROM user_messages WHERE id='11'");
    while($fetch=mysql_fetch_array($auslesen)) {
    $auslesenx=mysql_query("SELECT * FROM user_messages_data WHERE message='$fetch[messageid]'");
    while($fetchx=mysql_fetch_array($auslesenx)) {
    echo "$fetchx[text]";
    }}
    So würde mann z.b. alle posts zur nachricht mit der id 11 bzw der messageid 9 bekommen ...


    Jetzt verstanden?

    Kommentar


    • #17
      Bitte beitrag ändern und Code-Tags benutzen.

      Edit: Okay, Code-Tags hast du inzwischen, -Code-Tags wären noch besser.

      Zitat von Hendrik33 Beitrag anzeigen
      Jetzt verstanden?
      Nein.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #18
        Ich weiß nicht wie ichs erklären soll, also nochmal

        user 1 schickt an user 2 eine nachricht

        dann wird in die tabelle user_messages ne zeile eingetragen ...
        Das Feld id ist forlaufend ... Das Feld messageid wird erst nach dem eintragen sofort danach via update table SET messageid='mysql_insert_id...' beschrieben ....
        der AUTO Increment würde hier z.b. sein 12

        die nachricht selber wird in user_messages_data gespeichert
        das feld message bekommt hier auch die 12, damit es der nachricht zugeordnet ist ...

        wenn der andere user jetzt auf die nachricht anwortet wird wieder ne zeile eingetragen in user_messages aber mit der messageid von der aufgerufenen nachricht die z.b. mal per input hidden übertragen wird ...
        da es ja ne neue zeile gibt in der der an und von wert jetzt andersum sind damit der eigentliche absender der zuerst ne nachricht an einen gesendet hat ja die nachricht dann auch sehen muss .... das feld id wandert eben jetzt auf 13 kriegt aber in messageid die 12 von gerade eben ... denn beide müssen ja zur ursprungsnachricht was schreiben ...

        jetzt kapiert? gibts ja net

        Kommentar


        • #19
          Das hatte ich schon lange kapiert. Trotzdem ergibt es keinen Sinn. Laut deinem Dump gibt es Thread 9 und Thread 12. Jeder davon hat 2 Nachrichten: Thread 9: 9, 11 und Thread 12: 12, 13, oder anders ausgedrückt:

          9, von 67, an 1, betreff: danke, gehört zu sich selbst
          11, von 1, an 67, betreff: danke, gehört zu 9
          12, von 20, an 3, betreff: dddd, gehört zu sich selbst
          13, von 3, an 2, betreff: dddd, gehört zu 12

          Soweit ist ja alles klar, aber jetzt kommen die Nachrichtentexte:

          88, gehört zu 9, gesendet von 1209, text: hi wie gehts?

          Warum 1209 und nicht 67? Aber es geht noch weiter:

          89, gehört auch zu 9, gesendet von 247, text: :no11:

          Beide gehören zur 9? Was soll denn dann dort drin stehen? Wie soll man dann noch wissen, was von wem an welchen Empfänger ging? Dafür gibt es aber keinen Text (user_messages_data), der zu Nachricht 11 (und auch 13) gehört. Die ist also leer, dafür weiß man aber, wer sie geschrieben hat und für wen sie gedacht war. Genau das ist nicht nachvollziehbar.

          Jetzt kapiert?
          Zuletzt geändert von AmicaNoctis; 22.09.2010, 15:33.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #20
            Zitat von AmicaNoctis Beitrag anzeigen

            Warum 1209 und nicht 67? Aber es geht noch weiter:

            89, gehört auch zu 9, gesendet von 247, text: :no11:

            Beide gehören zur 9? Was soll denn dann dort drin stehen? Wie soll man dann noch wissen, was von wem an welchen Empfänger ging? Dafür gibt es aber keinen Text (user_messages_data), der zu Nachricht 11 (und auch 13) gehört. Die ist also leer, dafür weiß man aber, wer sie geschrieben hat und für wen sie gedacht war. Genau das ist nicht nachvollziehbar.

            Jetzt kapiert?
            Du hast Recht
            Das muss so heissen anstatt 1209 z.b. bei 88 die 1 und bei 89 die 67

            (88, '9', '88', 'hi wie gehts?', '1285155091'),
            (89, '9', '1209', ':no11: ', '1285158920'),

            Wäre aber garnicht so tragisch es kommt ja auf die das Feld message mit der 9 und auf das datum an vom neusten ... Aber du hast Recht! Fehler von mir!

            Kommentar


            • #21
              Ok, dass die IDs falsch waren ist eine Sache, aber die andere ist offenbar noch nicht angekommen: Du speicherst die Nachrichtentexte immer zu der Nachricht, die den Thread selbst darstellt, anstatt sie zu der Nachricht zu speichern, zu der sie gehören. Deine DB-Struktur ist total chaotisch und die vielen text-Spalten die eigentlich int sein sollten, tun ihr übriges, jegliche Performance im Ansatz zu ersticken.

              Vorschlag: setz die DB neu und normalisiert auf und kümmere dich dann um die Abfragen. Im Moment sieht das nach WOMBAT aus.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #22
                Das mit den Feldtypen kann ich ja ändern gebe ich dir recht aber wie soll es denn anderst gehen ?? Es muss ja für jeden User ein Eintrag geben in der Tabelle user_messages deswegen musste ich die messageid untergliedern ... kann ja nicht nach id gehen weil das wären ja zwei verschiedene

                Kommentar


                • #23
                  wieso MUSS es für jeden User einen Eintrag dort geben ?

                  angenommen der User meldet sich an und erkrankt dann (Beinbruch , komplizierter Heilungsverlauf *g*) und kommt für 6 Monate nicht dazu was zu schreiben - ergo würde ich NICHT erwarten, dort etwas von ihm zu finden, weil der User ja gar keinen Nachrichten Thread starten konnte
                  [font=Verdana]
                  Wer LESEN kann, ist klar im Vorteil!
                  [/font]

                  Kommentar


                  • #24
                    Hier ist doch der Wurm drin ...

                    Es ist doch langsam der Wurm drin

                    Jetzt nochmal ganz von neu!

                    Es gibt Benutzer A (ID 1100)
                    Es gibt Benutzer B (ID 2211)

                    Fallbeispiel:
                    Benutzer A sendet eine Nachricht an Benutzer B

                    Tabellenstruktur:
                    --------------------------------
                    Name: user_messages
                    Feld: id (auto_increment)
                    Feld: von
                    Feld: an
                    Feld: betreff
                    Feld: datum
                    Feld: messageid
                    --------------------------------
                    user_messages_data mit den Felder:
                    Feld: id (auto_increment)
                    Feld: user
                    Feld: message
                    Feld: text
                    Feld: datum


                    Legen wir los:
                    Benutzer A sendet eine Nachricht an Benutzer B

                    // Nachricht anlegen
                    PHP-Code:
                    mysql_query("INSERT INTO user_messages SET von='1100', an='2211', betreff='Beispielbetreff', datum='1285170518'");
                    mysql_query("UPDATE user_messages SET messageid='".mysql_insert_id()."' WHERE id='".mysql_insert_id()."'"); 
                    // Infos zur Nachricht speichern und zuordnen
                    PHP-Code:
                    mysql_query("INSERT INTO user_messages_data SET user='1100', message='".mysql_insert_id()."', text='Beispieltext von Benutzer A',  datum='1285170518'"); 
                    Die Nachricht wurde gespeichert und wird jetzt beim anderen Benutzer im Posteingang angezeigt
                    Weiter gehts

                    Jetzt antwortet Benutzer B an A!
                    Die MessageID von der ersten Nachricht wird per hidden field übertragen aus dem FORM

                    // Nachricht anlegen
                    PHP-Code:
                    mysql_query("INSERT INTO user_messages SET messageid='1 da wir von einern leeren Tabelle ausgehen', von='2211', an='1100', betreff='Beispielbetreff', datum='1285170690'"); 
                    // Infos zur Nachricht speichern und zuordnen
                    PHP-Code:
                    mysql_query("INSERT INTO user_messages_data SET user='2211', message='1', text='Beispieltext von Benutzer b',  datum='1285170690'"); 


                    So werden die Nachrichten eingetragen ...


                    Jetzt müssen alle Nachrichten von Benutzer 2211 ausgelesen werden z.B.

                    PHP-Code:
                    SELECT DISTINCT(user_messages.idFROM user_messages,user_messages_data WHERE user_messages.an='2211' AND 
                     
                    user_messages_data.message=user_messages.messageid ORDER by user_messages_data.datum DESC 
                    Dieser Code würde nur alle id`s auflisten aber nicht nach datum sortiert.
                    Was ich wissen möchte ist wie der Query lauten müsste damit es nach Datum der letzten Nachricht sortiert wird. Denkt daran das Datum steht in der Tabelle user_messages_data und Feld datum ... Jeder Post hat ja immer einen Timestamp ... Das Feld Datum in der Tabelle user_messages ist das Datum wann die Hauptnachricht vom Erstsender gesendet wurde ...

                    Hoffe das ist jetzt gut erklärt!

                    Kommentar


                    • #25
                      @eagle: Du solltest langsam mal anfangen, Threads komplett zu lesen, bevor du deine Meinung über etwas kundtust, was du ausschließlich aus dem letzten Beitrag entnehmen zu können glaubst.

                      @Hendrik: Der Ablauf ist klar, aber wenn du alle Nachrichtentexte (in diesem Falle die Antwort) zur allerersten Nachricht (in diesem Falle die 1) speicherst, kannst du nicht mehr zuordnen, zu welcher Nachricht der Text jetzt wirklich gehört. In deinem Beispiel ist der Antworttext (user_messages_data 2) nicht mehr der Antwort selbst (user_messages 2) zuzuordnen, weil er ja nur noch auf die user_messages 1 verweist. Das kann zu einem großen Problem werden und das meinte ich die ganze Zeit schon.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #26
                        Super wenn das schonmal klar ist!

                        Aber das verstehe ich nicht was du sagst ...

                        Angenommen in Tabelle 1 hat die id vorne die 1283 was ja mit dem eigentlichen garnichts zu tun hat ...

                        Die messageid hat jetzt mal 33 ...


                        In der zweiten Tabelle haben dann alle Antworten bzw. Beiträge der beiden User im Feld message den Wert 33 ???

                        Wieso soll es da Probleme geben?

                        Kommentar


                        • #27
                          Beispiel:

                          Für die Übersichtlichkeit mal angenommen:
                          Alle 10er sind User-IDs
                          Alle 20er sind Message-IDs
                          Alle 30er sind Message-Data-IDs

                          Folgende Konversation zwischen Herbert (11) und Anni (12):

                          Code:
                          Herbert: Hallo Anni
                          Anni:    Hallo Herbert, na wie geht's?
                          Herbert: Super.
                          Herbert: und dir?
                          Anni:    Auch super.
                          Anni:    hast du was von Locke gehört?
                          Herbert: Bis jetzt nicht.
                          
                          user_messages
                          id messageid von an
                          21 21        11  12
                          22 21        12  11
                          23 21        11  12
                          24 21        11  12
                          25 21        12  11
                          26 21        12  11
                          27 21        11  12
                          
                          user_messages_data
                          id message user text
                          31 21      11   Hallo Anni
                          32 21      12   Hallo Herbert, na wie geht's?
                          33 21      11   Super.
                          34 21      11   und dir?
                          35 21      12   Auch super.
                          36 21      12   hast du was von Locke gehört?
                          37 21      11   Bis jetzt nicht.
                          So machst du es im Moment und du hast jetzt keine Möglichkeit mehr, herauszufinden, was in user_messages 23 geschrieben wurde. Umgekehrt ist es schwierig herauszufinden, wem Anni in user_messages_data 35 geschrieben hat.

                          Das ist das Problem: du hast keine Verbindung zwischen einer Nachricht und ihrem Text.

                          Hoffe, es ist jetzt klarer geworden.
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #28
                            Ahhh so meinst du das, nein das ist so...

                            Es gibt wenn beide sich geschrieben haben insgesamt nur 2 Zeilen einmal:
                            Für eine Message ID wird es immer nur 2 Einträge geben einmal mit von und an in jeweils umgekerhter Reihenfolge

                            an 1
                            von 2

                            und umgekerht ... also

                            user_messages
                            id messageid von an
                            21 21 11 12
                            22 21 12 11
                            mehr nicht ... (das wird per php script geprüft ob der eintrag schon existiert)

                            Verstehst du? Es klappt ja alles wunderbar ...
                            Nur das sortieren nach dem aktuellsten weiß ich nicht wie ichs machen muss ...
                            Zuletzt geändert von Hendrik33; 22.09.2010, 17:41.

                            Kommentar


                            • #29
                              Nach welchem datum willst du denn sortieren? Nach dem in user_messages oder in user_messages_data?

                              Edit: Wenn es bei dir immer nur eine Antwort gibt, kann also niemand auf eine Antwort antworten, sondern muss ein neues Thema erstellen?
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Kommentar


                              • #30
                                Es soll nach dem Datum aus der Messages Data Tabelle gehen wieso sollte das nicht gehen ... Stell dir das vor wie ein Chat zwischen den beiden Benutzern ...

                                Kommentar

                                Lädt...
                                X