• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fehler: Dreifache Ausgabe aus Datenbank

Degers

Mitglied
Hallo,

bei der Ausgabe von Inhalten einer MySQL-Tabelle erscheinen, mir unerklärlicherweise, manche Ausgaben dreimal, diese unterscheiden sich nicht im Geringsten von dern Ausgaben, die nur einmal ausgegeben werden.
Es handelt sich um eine Suchfunktion mit verschiedenen Parametern, nur bei der Textsuche erfolgt die dreifache Ausgabe, folgende Abfrage:

PHP:
$abfrage = "SELECT * FROM vocabulary join user WHERE username = '$global_username'  AND german LIKE '%$requested_text%' or croatian LIKE '$requested_text' ORDER BY voc_id ASC LIMIT 10";

Bei anderen Abfragen wie beispielsweise die Suche nach einer ID funktioniert die Ausgabe fehlerfrei:
PHP:
$abfrage = "SELECT * FROM vocabulary join user WHERE username = '$global_username'  AND voc_id = '$requested_vocid' ORDER BY voc_id ASC LIMIT 10";

Die Ausgabe ist stets identisch, dort wird wohl kein Fehler vorliegen, trotzdem hier ein Auszug des relevanten Codes:
HTML:
$ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)){echo "<tr><td>";if ($row->checked == '0'){echo "<img src=\"http://www.html.de/images/unchecked.gif\" alt=\"Vokabel nicht geprüft\">";}elseif ($row->checked == '1'){echo "<img src=\"http://www.html.de/images/checked.gif\" alt=\"Vokabel geprüft und für gut befunden\">";}echo "</td><td>";echo  $row->german ;echo "</td><td>";echo $row->croatian;echo "</td>";echo "<td>";echo lexcat_converter($row->lex_cat);echo "</td>";echo "<td>";if ($row->genus == 'm'){echo "männl.";}elseif($row->genus == 'f'){echo "weibl.";}elseif($row->genus == 'n'){echo "neutr.";}echo "</td>";echo "<td>";echo "<a href=\"#\" onClick=\"wrapper();spoil('$spoil_id');\"><img src=\"http://www.html.de/images/edit.png\" alt=\"Eintrag bearbeiten\" ></a>";echo "<a href=\"?page=check_vocabulary&tab=delete_entry&vocid=$row->voc_id\"\"><img src=\"http://www.html.de/images/delete.png\" alt=\"Eintrag löschen\" ></a>";echo "<span style=\"float:right;\">";if ($row->checked == '0'){echo "<a href=\"?page=check_vocabulary&tab=setstatus&vocid=$row->voc_id&status=1\"><img src=\"http://www.html.de/images/checked.gif\" alt=\"Eintrag ist korrekt\" ></a>";}elseif ($row->checked == '1'){echo "<a href=\"?page=check_vocabulary&tab=setstatus&vocid=$row->voc_id&status=0\"><img src=\"http://www.html.de/images/unchecked.gif\" alt=\"Eintrag ist nicht korrekt\"></a>";}?></span></td><div  class="overall_window" id="<? echo $spoil_id; ?>">
<h2>Vokabel editieren</h2><a href="#" onClick="closewrapper();spoil('<? echo $spoil_id; ?>');"><img src="http://www.html.de/images/delete.png" alt="Schließen" id="overallwindow_editclose"></a><form method="post" action="?page=check_vocabulary&tab=edit_entry"><input name="german"value="<? echo $row->german; ?>" id="editentry_german"><input name="croatian" value="<? echo $row->croatian; ?>" id="editentry_croatian"><select name="lex_cat" id="editentry_lexcat"><option value="0"<?if ($row->lex_cat == '0'){echo "selected=\"selected\"";}?>>Substantiv</option><option value="1"<?if ($row->lex_cat == '1'){echo "selected=\"selected\"";}?>>Verb</option><option value="2"<?if ($row->lex_cat == '2'){echo "selected=\"selected\"";}?>>Adjektiv</option><option value="3"<?if ($row->lex_cat == '3'){echo "selected=\"selected\"";}?>>Adverb</option><option value="4"<?if ($row->lex_cat == '4'){echo "selected=\"selected\"";}?>>Pronomen</option><option value="5"<?if ($row->lex_cat == '5'){echo "selected=\"selected\"";}?>>Präposition</option><option value="6"<?if ($row->lex_cat == '6'){echo "selected=\"selected\"";}?>>Konjunktion</option><option value="7"<?if ($row->lex_cat == '7'){echo "selected=\"selected\"";}?>>Numerale</option><option value="8"<?if ($row->lex_cat == '8'){echo "selected=\"selected\"";}?>>Phrase</option></select><select name="genus" id="editentry_genus"><option value="0" <?if ($row->genus == '0'){echo "selected=\"selected\"";}?>>-</option>
<option value="m"<?if ($row->genus == 'm'){echo "selected=\"selected\"";}?>>Maskulinum</option><option value="f"<?if ($row->genus == 'f'){echo "selected=\"selected\"";}?>>Femininum</option><option value="n"<?if ($row->genus == 'n'){echo "selected=\"selected\"";}?>>Neutrum</option> </select><input type="hidden" name="id" value="<? echo $row->voc_id; ?>"><input type="submit" id="editentry_submit"></form></div><?$spoil_id++;}?></td> </tr></table>

Der Code vermüllte von selbst so, pardon, krieg ich nicht formatiert rein.
Woran könnte die dreifache Ausgabe liegen? Die Datensätze liegen definitiv nur einmal vor.
Sollten noch Informationen gebraucht werden liefere ich diese gern nach, danke im Vorraus für etwaige Hinweise.
 
Wieviele Ergebnisse kommen denn bei den Statements raus wenn Du sie direkt in der Datenbank, z.B. per phpmyadmin, ausführst?

Wieso ist der dritte Quellcode-Block von dir so hässlich formatiert? Etwas mehr Zeilenumbrüche und Einrückungen würden ihn lesbarer machen.
 
Genau das selbe Ergebnis, dreifache Ausgabe des selben Datensatzes (unter der selben ID) bei einer Ausführung direkt im phpmyadmin.

Wieso ist der dritte Quellcode-Block von dir so hässlich formatiert? Etwas mehr Zeilenumbrüche und Einrückungen würden ihn lesbarer mach

...
Der Code vermüllte von selbst so, pardon, krieg ich nicht formatiert rein.
 
Guten Morgen,

Bist du sicher, dass du das Kreuzprodukt aus den Tabellen willst?
Was auch schon die entscheidende Frage wäre, nach einer Entfernung des Joins funktioniert die Abfrage wie gewünscht. Mit Joins werde ich mich wohl nochmal auseinandersetzen müssen, da ich bisher nicht verstehe, warum ausschließlich bei der Textsuche dieser Effekt entsteht.
Das grundsätzliche Problem ist erkannt, dankeschön.
 
Die Frage ist halt, was du haben möchtest. also in welcher Beziehung vocabulary und user stehen
 
Entsprechende inner left oder right Joins setzen, dann sollte es ebenfalls klappen.
 
Zu der Ausgabe der Vokabeln (vocabulary), zu der auch die Ausgabe verschiedener Bearbeiter gehört, wird eine User ID in der Tabelle vocabulary gespeichert. Zu dieser ID möchte ich schlicht und ergreifend den Usernamen zu ausgeben.
 
Das ist schlicht und ergreifend ein left join

Code:
$abfrage = "SELECT * FROM vocabulary LEFT JOIN user USING(user_id)
Falls in beiden Tabellen, die user mit user_id markiert sind, ansonsten musst du ON benutzen.
 
Zurück
Oben