Selects vergleichen

Transporter

Mitglied
Hallo,

ich hole mir fünf Werte aus einer Tabelle meiner Datenbank.

PHP:
$result = mysql_query("SELECT new FROM move WHERE move_id = '$a';", $game);
	while($move = mysql_fetch_object($result))
        {
        .....
        }

hinterher möchte ich aber gucken, ob $move->new in allen fünf Spalten den gleichen Wert hat. Könnte mir hier irgendeiner irgendwie auf die Sprünge helfen.
Hab schon ein bisschen mit Arreys rumgemacht aber irgendwie find ich keinen richtigen Ansatz.

Gruß Markus
 
Folgendes ist möglich:
PHP:
$array = array();
while( $move = mysql_fetch_object($result) ) {
	$array[] = $move->new;
}
if( count(array_unique($array)) === 1 ) {
	// alle Werte sind gleich
}
 
Okay, vielen dank für Deine Hilfe.
Hab das aber noch nicht so richtig hinbekommen.

Mein Select sieht folgendermaßen aus:
PHP:
for($a = 1; $a < 11; $a ++)
	{
	$result = mysql_query("SELECT new FROM move WHERE move_id = '$a';", $game);
		while($move = mysql_fetch_object($result))
		{
		$board = mysql_fetch_object
			(mysql_query("SELECT brick_id FROM board WHERE user_id = '".$_SESSION['user_id']."' AND field_id = '$move->new';", $game));

		$class = mysql_fetch_object
			(mysql_query("SELECT class_id FROM brick_class WHERE brick_id = '$board->brick_id';", $game));
		}
	}

Es ist wichtig, daß class->class_id bei allen Steinen gleich ist.
Also in einer der zehn for Schleifen.
 
Dein Vorposter hat Dir die Frage eigentlich schon beantwortet:

PHP:
for($a = 1; $a < 11; $a ++)
	{
	$result = mysql_query("SELECT new FROM move WHERE move_id = '$a';", $game);
		while($move = mysql_fetch_object($result))
		{
		$board = mysql_fetch_object
			(mysql_query("SELECT brick_id FROM board WHERE user_id = '".$_SESSION['user_id']."' AND field_id = '$move->new';", $game));

		// achtung, hier in fetch_array ändern. Resultate aus einer DB sind "theoretisch" eh keine Objekte... ;)
		$class = mysql_fetch_array
			(mysql_query("SELECT class_id FROM brick_class WHERE brick_id = '$board->brick_id';", $game));
		}
		// hier neuer Code:
		if(count(array_unique($class)) === 1) {
			// alle gleich
		}
		else { /* fehler, hier z.B. ein break oder so */ }
	}

Edit:
Ich hätte jetzt das etwas anders gemacht:

PHP:
// alles in einen Query und dann in einen Array:
$results = mysql_query("
		SELECT
			`new`
		FROM
			`move`
		WHERE
			`move_id` =< 1
			AND
			`move_id` => 10
		ORDER BY
			`move_id` ASC
	", $game);

// brauchen wir noch...
$uniqueIds = array();

while($move = mysql_fetch_assoc($results)) {
	$otherResults = mysql_fetch_assoc(mysql_query("
		SELECT
			`board`.`brick_id` , `brick_class`.`class_id`
		FROM
			`board`
		WHERE
			`board`.`user_id` = '".$_SESSION['user_id']."'
			AND
			`board`.`field_id` = '".$move['new']."'
			AND
			`brick_class`.`brick_id` = `board`.`brick_id`
	", $game));

	$uniqueIds[] = $otherResults['brick_class'];

	if(count(array_unique($uniqueIds)) === 1) {
		// alles i.o.
	}
	else {
		// fehler
	}
}

Was hats gebracht? Du brauchst im Erfolgsfall 30 Queries, meine Methode (wenn sie geht, k.A. ob du die Arrays / Objekte später noch brauchst...) dagegen 11.

Falls du nur Abfragen willst, ob die IDs wirklich einzigartig sind, ginge dies sicherlich (JOINS sind in diesem Fall deine Freunde...) auch mit einem Query. Überleg Dir doch ausserdem, ob Du nicht noch andere Daten aus den jeweiligen Tabellen benötigst? (Wenn schonmal ein Query aufrufst...)
 
Zuletzt bearbeitet:
Zurück