Datenbankabfrage funktioniert nicht

  • Themenstarter Themenstarter di-five
  • Beginndatum Beginndatum
D

di-five

Hallo,

ich habe zwei Tabellen. In jeder Tabelle steht die gleiche Nummer.

In Tabelle eins steht der Suchstring und die Kategorie, in Tabelle zwei der Name.

Ich verknüpfe die beiden Tabellen durch INNER JOIN.

Die Abfrage sieht so aus:

PHP:
    $ergebnis_kdn_b = mysql_query("SELECT *
                                     FROM tb1
                               INNER JOIN tb2
                                       ON tb1.nummer = tb2.nummer
                                    WHERE tb1_suchstring LIKE '%$_POST[finde]%' OR tb2_name LIKE '%$_POST[finde]%' AND tb1.kategorie = '1'");

    $ergebnis_kdn_v = mysql_query("SELECT *
                                     FROM tb1
                               INNER JOIN tb2
                                       ON tb1.nummer = tb2.nummer
                                    WHERE tb1_suchstring LIKE '%$_POST[finde]%' OR tb2_name LIKE '%$_POST[finde]%' AND tb1.kategorie = '4'");

Die Abfrage funktioniert einwandfrei.

Ich habe vier mal die gleiche Abfrage, weil ich nicht mehrmals auf ein query zugreifen kann?

So, jetzt sieht es wie folgt aus:

tb1_kategorie = 1
tb2_name = Glas
tb1_suchstring = drei


tb1_kategorie = 4
tb2_name = Glas
tb1_suchstring = vier


Alles wird richtig in der zugehörigen Kategorie angezeigt.


Zweites Scenario:

tb1_kategorie = 1
tb2_name = Bär
tb1_suchstring = sechs


tb1_kategorie = 4
tb2_name = Flug
tb1_suchstring = sechs


Wenn ich als Suchstring nun sechs angebe, werden beide Datensätze in derselben Kategorie (4) angezeigt.
Warum geht das beim Namen und nicht beim Suchstring?

Ich würde mich über eine Antwort freuen.

Viele Grüße

di-five
 
Hi

ich finde, das ist jetzt absolut schwer, da etwas zu schreiben.

Zum einen kannst Du die Abfragen zusammenfassen:

... where kategorie in (1,4)

Des weiteren liegt die Vermutung nahe, dass sich der sechser Datensatz in Kategorie 4 zweimal befindet und in 1 gar nicht. ;)

Mal ganz ehrlich, wer kann das genau sagen, ohne die Tabellen zu kennen? :confused:
 
Hi Luzie,

hier mal die Tabellen:

Beispiel 1:
Code:
Kategorie 1 | Kategorie 4
-------------------------
Glas        | Glas         <- Name
drei        | vier         <- Suchstring

funktioniert

Suchstring: Glas

Ausgabe (auf der Seite, Kategorie ist jeweils die Überschrift):
----------------------------------------------------
Kategorie 1 (Name der Kategorie)
----------------------------------------------------
Nummer: 123
Name: Glas
usw. aus der Tabelle

----------------------------------------------------
Kategorie 4 (Name der Kategorie)
----------------------------------------------------
Nummer: 321
Name: Glas
usw. aus der Tabelle


Suchstring: drei

Ausgabe (auf der Seite, Kategorie ist jeweils die Überschrift):
----------------------------------------------------
Kategorie 1 (Name der Kategorie)
----------------------------------------------------
Nummer: 123
Name: Glas
usw. aus der Tabelle


Suchstring: vier

Ausgabe (auf der Seite, Kategorie ist jeweils die Überschrift):
----------------------------------------------------
Kategorie 4 (Name der Kategorie)
----------------------------------------------------
Nummer: 321
Name: Glas
usw. aus der Tabelle


so, das funktioniert, bei Suchstring (Eingabe des Namen) werden beide Überschriften angezeigt, bei Suchstring (drei oder vier) jeweils ein Datensatz mit der dazugehörigen Kategorie, die per Kategorien-ID ausgelesen wird.

Wenn jetzt nicht der Name, sondern der Suchstring identisch ist funktioniert das leider nicht mehr, und ich verstehe nicht, warum:


Beispiel 2:
Code:
Kategorie 1 | Kategorie 4
-------------------------
Bär         | Flug         <- Name
sechs       | sechs        <- Suchstring

funktioniert nicht

Suchstring: Bär

Ausgabe (auf der Seite, Kategorie ist jeweils die Überschrift):
----------------------------------------------------
Kategorie 1 (Name der Kategorie)
----------------------------------------------------
Nummer: 789
Name: Bär
usw. aus der Tabelle


Suchstring: Flug

Ausgabe (auf der Seite, Kategorie ist jeweils die Überschrift):
----------------------------------------------------
Kategorie 4 (Name der Kategorie)
----------------------------------------------------
Nummer: 987
Name: Flug
usw. aus der Tabelle


Suchstring: sechs

Ausgabe (auf der Seite, Kategorie ist jeweils die Überschrift):
----------------------------------------------------
Kategorie 4 (Name der Kategorie)
----------------------------------------------------
Nummer: 789
Name: Bär
usw. aus der Tabelle

Nummer: 987
Name: Flug
usw. aus der Tabelle


Beide Datensätze werden in der selben Kategorie angezeigt, wenn ich nach sechs suche, ich verstehe das nicht :(


Ich habe zwei Kategorien.
Ich möchte jede Kategorie einmal ausgeben.
Alle Datensätze sollen in der jeweiligen Kategorie angezeigt werden.

Das kann doch nicht sein, dass der beim Suchstring sechs beide Datensätze in der gleichen Kategorie ausgibt oder? Im Datensatz haben die unterschiedliche Kategorien-ID's, die Suche nach dem Namen funktioniert ja auch, nur nicht nach dem Suchstring, für mich ist da irgendwo ein Fehler in der Logik *gg*

Weil wenn der Name identisch ist, zeigt der das in der richtigen Kategorie an, wenn der Suchstring identisch ist, packt der die Ausgabe in die gleiche Kategorie. Suchstring und Kategorie sind in der gleichen Tabelle. Name und Suchstring sind nicht in der gleichen Tabelle. Die Tabellen sind aber per INNER JOIN verknüpft, wie in vorigem Beitrag gepostet. Bei Beispiel 1 funktioniert das

Würde mich über eine Idee oder einen Ansatz für die Problembeseitigung sehr freuen!

Viele Grüße

di-five
 
Zuletzt bearbeitet von einem Moderator:
Hallo

was passiert denn, wenn Du (nur testweise) eine Abfrage stellst und die Bedingung wie folgt setzt?

PHP:
"([...]
WHERE (tb1_suchstring LIKE '%".$_POST['finde']."%' OR tb2_name LIKE '%".$_POST['finde']."%') AND tb1.kategorie in(1,4)");
 
Hi Luzie,

ich habs raus, da Problem besteht darin, dass der CODE im ersten Post falsch ist.

Hier mal der richtige Code:

PHP:
    $ergebnis_kdn_b = mysql_query("SELECT *
                                     FROM tb1
                               INNER JOIN tb2
                                       ON tb1.nummer = tb2.nummer
                                    WHERE tb1_suchstring LIKE '%$_POST[finde]%' AND tb1.kategorie = '1' OR tb2_name LIKE '%$_POST[finde]%' AND tb1.kategorie = '1'");

    $ergebnis_kdn_v = mysql_query("SELECT *
                                     FROM tb1
                               INNER JOIN tb2
                                       ON tb1.nummer = tb2.nummer
                                    WHERE tb1_suchstring LIKE '%$_POST[finde]%' AND tb1.kategorie = '4' OR tb2_name LIKE '%$_POST[finde]%' AND tb1.kategorie = '4'");


Das Problem ist, dass OR entweder die linke Seite macht, oder die rechte Seite :rolleyes:

Ich muss die Kategorie auf beiden Seiten abfragen, sonst funktioniert das nicht.

Vielen Dank für deine Hilfe! :)

Viele Grüße

di-five
 
Zuletzt bearbeitet von einem Moderator:
Zurück