Arrays in SQL WHERE bedingung mit NOT IN(...)

djcritical

Grünschnabel
Grüßt Euch alle zusammen,

ja wie fange ich am besten an.. Ich stehe seit 2 Tagen aufm Schlauch. Entweder bin ich echt zu blöd einen Fehler zu sehen oder es ist grundlegend falsch gedacht. Google konnte mir dieses mal nicht helfen.

Also es geht bei mir um ein Voting System, so erstmal im ganz Groben. An der Stelle wo man in die Kategorien reinschaut wird dann ein zufalls Battle angezeigt. soweit ja alles kein Problem. Jedoch soll nach abgabe des Votes dieses Battle dann bei der zufallswahl ausgeschlossen werden.

Zu Info .. die Battles sind in der Tabelle "Battles" gespeichert und beinhalten alle wichtigen Informationen. Dann gibt es noch die Tabelle "BattlesVote" wo die Battle ID (BaID), die KategorieID (BaKaID) und die UserID (UserID) geschrieben wird.

So nu zu dem Code der mich zum Fluchen bringt..

Ich lese mir erstmal alle BattleID´s in ein Array zu denen ich schon gevotet habe.
PHP:
$sql = "SELECT * FROM BattlesVote WHERE BaKaID = '".$bakaid."' AND UserID = '".$_SESSION['userid']."'";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
	$record = $row['BaID'];
}

Und im nächsten Schritt möchte ich dann diese bekommen Id´s ausschließen

PHP:
$sql2 = "SELECT * FROM Battles WHERE ID NOT IN('.implode(',',$record).') AND 
										BaKaID = '".$bakaid."' AND
										Aktiv = '1' 
										ORDER BY RAND() LIMIT 1";
$result2 = mysql_query($sql2) or die(mysql_error());
$row2 = mysql_fetch_assoc($result2);

doch er beachtet dies garnicht. Habe mir vorher mit printr mal das Array ausgeben lassen, dort sind alle ID´s drinn.. ich blicks nich :confused:

Vielen Dank für Eure Hilfe
Gruß Dave
 
Das sollte eigentlich mit einem Left Outer Join funktionieren.
PHP:
$query = '
	SELECT
	        `Battles`.*
	    FROM
	        `Battles`
	    LEFT OUTER JOIN
	        `BattlesVote` ON `Battles`.`BaID`=`BattlesVote`.`BaKaID`
	    WHERE
	        `BattlesVote`.`BaKaID` IS NULL AND `UserID` = "'.$_SESSION['userid'].'" AND `BattlesVote`.`Aktiv` = 1
	    ORDER BY
	         RAND()
	    LIMIT
	         1';
 
Hallo Gumbo, vielen Dank für Deinen Denkanstoß. Hab mir gradmal das JOIN bischen zu Herzen genommen *g* .. das ist natürlich auch ein guter Lösungsweg. Wie Du Ihn geschrieben hattest hat aber nicht ganz funktioniert aber nach vielen hin und her hat es dann doch geklappt mit etwas umschreiben

PHP:
$sql2 = "SELECT
			Battles.*
		FROM
			Battles
		INNER JOIN
			BattlesVote ON
					BattlesVote.UserID='".$_SESSION['userid']."' AND
					BattlesVote.BaKaID='".$bakaid."'
		WHERE
			Battles.ID!=BattlesVote.BaID AND
			Battles.BaKaID='".$bakaid."' AND
			Battles.Aktiv='1'
		ORDER BY
			RAND()
		LIMIT
			1";

Mit INNER JOIN gehts... da ich ja auch erst die JOIN ON Bedingung wissen möchte bevor die WHERE ausgeführt wird.

Musste dann allerdings vorher überprüfen ob die anzahl der battles in der kategorie der anzahl deren die ich schon gevotet habe entspricht. dann kommt die meldung du hast schon alle gevotet wenn nicht dann wird die abfrage ausgeführt..

denn ohne die abfrage werden nachdem ich alle gevotet habe die battles wieder aufgelistet. ich kann mir zwar nicht erklären warum, aber wenn jemand eine antwort drauf weis würd ich diese gern noch wissen.

ansonst vielen dank für die schnelle hilfe.

gruß dave
 
Zurück