MySQL WHERE IN spuckt kein Ergebnis aus

bazlivec

Mitglied
Hallo,

habe ein paar Wochen nicht an meinem Script gearbeitet, und jetzt wo ich wieder Zeit für finde, funktioniert es nicht..

Folgender where in Befehl spuckt kein Ergebnis aus:
Code:
$abfrage = mysql_query("SELECT * FROM Sheet1 WHERE ((b1 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) + (b2 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) + (b3 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) + (b4 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) + (b5 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) + (b6 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) + (b7 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))) > 3 ORDER BY Titel DESC") or die (mysql_error());

Die übergabe der Variablen (b (Suchbegriffe/Bedingungen)) erfolgt über die URL und anschließend per GET:
Code:
if ( isset($_GET['b1'],$_GET['b2'],$_GET['b3'],$_GET['b4'],$_GET['b5'],$_GET['b6'],$_GET['b7']) ){
  $b1 = mysql_real_escape_string($_GET['b1']);
  $b2 = mysql_real_escape_string($_GET['b2']);
  $b3 = mysql_real_escape_string($_GET['b3']);
  $b4 = mysql_real_escape_string($_GET['b4']);
  $b5 = mysql_real_escape_string($_GET['b5']);
  $b6 = mysql_real_escape_string($_GET['b6']);
  $b7 = mysql_real_escape_string($_GET['b7']);

Der Sinn des Ganzen soll sein, die Zeilen, die mindestens 3 Bedingungen erfüllen, auszugeben.
Inzwischen funktioniert aber gar nichts mehr, auch wenn ich z.B. das > 3 weglasse.

Hiilfe :( :D

Gruß
baz
 
Hi,

tausche die "+" Zeichen in deinem WHERE durch "AND" aus. Ausserdem denke ich, dass dort ein "COUNT()" stehen muss. Kanns aber leider nicht testen, probiers einfach mal aus :)
Die Query war übrigens sehr schlecht zu lesen, da diese in einer Zeile war. Poste das nächste mal so was langes in mehreren Zeilen verteilt :)

SQL:
SELECT * FROM Sheet1 
  WHERE COUNT(
      (b1 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
      AND (b2 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
      AND (b3 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
      AND (b4 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
      AND (b5 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
      AND (b6 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
      AND (b7 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
    ) > 3 ORDER BY Titel DESC;

Eventuell auch die "AND" durch Kommatas "," austauschen, meine SQL-Kenntnisse sind grad etwas überfordert ;)

Gruß
BK
 
Zuletzt bearbeitet:
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 
Ich habe die Abfrage zu verantworten :D http://www.tutorials.de/relationale...4-mindestens-x-der-bedingungen-erfuellen.html


So sieht sie formatiert aus

SQL:
SELECT			*
FROM			Sheet1
WHERE			(
					(b1 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) +
					(b2 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) +
					(b3 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) +
					(b4 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) +
					(b5 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) +
					(b6 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7')) +
					(b7 IN ('$b1','$b2','$b3','$b4','$b5','$b6','$b7'))
				) > 3
ORDER BY		Titel DESC

Bist du wirklich ganz sicher, dass deine Tabelle solche Zeilen enthält? Bei der Menge an Spalten und Bedingungen kann man da ja leicht durcheinander kommen.

Aber um nochmal auf das Ursprüngliche Problem zurück zu kommen (aus dem anderen Thread): Das riecht sehr nach falschem Datenbank Design. Ich nehme an du könntest die Bedingungen in eine anderen Tabelle auslagern. Dann wäre es mit JOIN + COUNT viel einfacher zu lösen.
Kannst du uns sagen, was in der Tabelle für Werte stehen?
 
Zurück