Carl: Problem mit einem SELECT (mysql)

Hallo

ich erzeuge in einem PHP-Script einen query, der so am Ende aussieht:

SELECT * FROM scan_1, scan_2, scan_3, scan_4, scan_5, scan_6, scan_7, scan_8, scan_9, scan_10, scan_11, scan_12, scan_13, scan_14 WHERE scan_1.spieler LIKE '%Thomas%' AND scan_2.spieler LIKE '%Thomas%' AND scan_3.spieler LIKE '%Thomas%' AND scan_4.spieler LIKE '%Thomas%' AND scan_5.spieler LIKE '%Thomas%' AND scan_6.spieler LIKE '%Thomas%' AND scan_7.spieler LIKE '%Thomas%' AND scan_8.spieler LIKE '%Thomas%' AND scan_9.spieler LIKE '%Thomas%' AND scan_10.spieler LIKE '%Thomas%' AND scan_11.spieler LIKE '%Thomas%' AND scan_12.spieler LIKE '%Thomas%' AND scan_13.spieler LIKE '%Thomas%' AND scan_14.spieler LIKE '%Thomas%'

In der Tabelle scan_7 ist ein Eintrag, bei dem in der Spalte spieler Thomas drin steht. Aber trotzdem bekomme ich bei mysql_num_rows() 0 zurück.

Hier noch das Script:

$scans = "SELECT * FROM";
for($i=1;$i<15;$i++)
{
 if($i == 14)
  $foo = "scan_".$i."";
 else
  $foo = "scan_".$i.",";
 $scans .= " ".$foo." ";
}
$scans .= " WHERE ";
for($i=1;$i<15;$i++)
{
 if($i == 14)
  $bar = "";
 else
  $bar = "AND";
 $scans .= "scan_".$i.".spieler LIKE '%".$searchstring."%' ".$bar." ";
}
$scans .= "";

$scans = mysql_query($scans) or die("<br>" . mysql_errno().": ".mysql_error()."<br>");
echo  mysql_num_rows($scans);

Hab angenommen, dass es ein  mysql-Problem ist, dass ich hier irgendwo erzeuge, deshalb hab ichs mal als Datenbank-Frage definiert ;)

Wäre schön, wenn da jemand paar Tipps für mich hätte.

Gruss
Carl

  1. Hi,

    SELECT * FROM scan_1, scan_2, scan_3, scan_4, scan_5, scan_6, scan_7, scan_8, scan_9, scan_10, scan_11, scan_12, scan_13, scan_14

    worin unterscheiden sich diese vierzehn Tabellen strukturell?

    WHERE scan_1.spieler LIKE '%Thomas%' AND scan_2.spieler LIKE '%Thomas%' AND [...]

    Du verknüpfst jeden Datensatz aus scan_1, dessen spieler-Spalte "Thomas" beinhaltet, mit jedem Datensatz aus scan_2, dessen spieler-Spalte "Thomas" beinhaltet, mit jedem Datensatz aus [...]

    Wäre schön, wenn da jemand paar Tipps für mich hätte.

    Dein DB-Layout ist hundsgemein falsch.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Wäre auch nett mal Deine Datenbankstruktur zu sehen.
      Da ist bestimmt was faul, wenn ich mich nicht irre ! ;-)

      Stichwort: Normalisierte Datenbank !!

      Gruß,
      ...

    2. Hi

      worin unterscheiden sich diese vierzehn Tabellen strukturell?

      »»

      Die sind strukturell absolut identisch.

      Dein DB-Layout ist hundsgemein falsch.

      Problem ist, dass es nicht mein Layout ist ;)
      Ich hätte wohl alle Datensätze in einer Tabelle gepackt. Ich versuche ein Script anzupassen, welches leider ziemlich chaotisch gemacht ist aber auf mysql 4.x ausgelegt ist. Das Script verwendet ursprünglich Unions, allerdings soll es jetzt auf einem Server mit einer 3.x Version von mysql laufen und diese unterstützt meines Wissens nach keine Unions.
      So muss ich mir eben anders behelfen, wenn ich nicht die komplette DB-Struktur umschmeißen und alle Scripte umschreiben will.

      Gruss
      Carl

      1. Hi,

        worin unterscheiden sich diese vierzehn Tabellen strukturell?
        Die sind strukturell absolut identisch.

        ein ordentliches DBMS sollte bei sowas eine Exception schmeißen. Macht leider keins, soweit ich weiß.

        Dein DB-Layout ist hundsgemein falsch.
        Problem ist, dass es nicht mein Layout ist ;)

        Ja. Korrigiere es.

        So muss ich mir eben anders behelfen, wenn ich nicht die komplette DB-Struktur umschmeißen und alle Scripte umschreiben will.

        Schmeiß sie um.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Ja, aber natürlich bekommst Du keine Zeile zurück, denn Du fragst ja ausdrücklich nach solchen (zusammengesetzten) Datensätzen, bei denen ALLE Tabellenzeilen das Suchkriterium aufweisen.

    Tipp:

    versuch es mal mit

    SELECT * FROM 1,2,3,... WHERE (scan1.spieler = '%Thomas%' OR scan2.spieler = '%Thomas%' OR ...) ...

    Die Frage ist, inwieweit dieses Ergebnis sinnvoll ist.
    Du wirst die Suche weiteren Auswahlklauseln unterwerfen müssen, wenn die Inhalte auch brauchbar sein sollen (vermute ich mal).

    Aber schau selbst ;-)

    Grüße,
    Michael