SELECT - WHERE mit Variable

BocaSpanky

Mitglied
Hi,

folgendes:

Ich habe auf meiner index.php folgende Variable:

$app_users

mit print_r gibt er mir folgendes aus:

PHP:
Array
(
    [0] => 1530469148
    [1] => 100000538953504
)


Danach kommt eine SELECT Abfrage:

PHP:
$sql1 = "SELECT id FROM $db_table ORDER BY score ASC";

Hier gibt er mir alle vorhandenen Einträge ganz normal aus.

Jetzt möchte ich das er nur die ausgibt die auch in der $app_users sind.

Mit
PHP:
$sql1 = "SELECT id FROM $db_table WHERE id = '$app_users' ORDER BY score ASC";

hab ichs schon probiert ohne Erfolg.

Vielleicht wieß jemand Rat.

Grüße
Patrick
 
PHP:
$sql1 = "SELECT id FROM $db_table WHERE id = '{$app_users}' ORDER BY score ASC";
PHP:
$sql1 = "SELECT id FROM $db_table WHERE id = '" + $app_users + "' ORDER BY score ASC";
 
Danke für deine Antwort. Das hab ich gesucht.

Jetzt aber mein Problem.

Wenn ich
PHP:
WHERE id = '{$app_users}'
weglasse werden alle Einträge aufgelistet. Sobbald ich das wieder einbaue kommt nur UNDEFINED.

Is es denn generell möglich zu sagen das die Arrays die in der $app_users stehen abgelichen werden mir denen in der DB und nur die ausgegeben werden die übereinstimmen?
 
Guck dir doch das query mal an, welches entsteht. Das sieht nämlich circa so aus:
Code:
SELECT id FROM tabelle WHERE id = 'Array' ORDER BY score ASC

Das macht natürlich keinen Sinn. Du brauchst sowas:

PHP:
$sql1 = "SELECT id FROM $db_table WHERE id IN (".implode($app_users,',').") ORDER BY score ASC";
 
Zuletzt bearbeitet:
Jetzt muss ich nochmal stören...

Das hier wäre mein Ausgangsscript. Mit diesem lassen sich alle Einträge in der DB auslesen ohne Probleme. Dargestellt werden die Variablen in einem FlashObject mit Textfeldern z.B. name1, score1, name2, score2 usw.
PHP:
<?
include_once ("_data.php");

$conn = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$conn);

$result1 = mysql_db_query($db_name,"SELECT id FROM $db_table ORDER BY score ASC");

$num = 1;

while($r = mysql_fetch_object($result1))
{
	$result = mysql_db_query($db_name,"SELECT * from $db_table WHERE id='{$r->id}'");
	$resultArray = mysql_fetch_array($result);
	$name = $resultArray["name"];
	$firstname = $resultArray["firstname"];
	$score = $resultArray["score"];
	$pic = $resultArray["pic"];
	
	if ($num<=$st_size) {
			if ($flash=1) {
				echo "&name$num=$name&firstname$num=$firstname&score$num=$score&pic$num=$pic";
			}
			$num++;
	}
}
mysql_close ($conn);
?>

Wenn ich nun

PHP:
$result1 = mysql_db_query($db_name,"SELECT id FROM $db_table ORDER BY score ASC");

änder in

PHP:
$result1 = mysql_db_query($db_name,"SELECT id FROM $db_table WHERE id IN (".implode($app_friends,',').") ORDER BY score ASC");

teilt mir das echo zwar genau die auserwählten Variablen mit die ich eingrenze mit $app_friends aber die Variablen lassen sich nicht mehr in Flash darstellen in den Textfeldern name1, name2 usw. Ergebnis nur UNDEFINIED.

Da ich persönlich nicht so fit bin in PHP steh ich nach etlichen Versuchen und Variationen aufm Schlauch.

Ich hoffe das ist einigermaßen verständlich beschrieben. Hoffe das mir einer unter meine Ärmel greifen kann!

Grüße
Patrick
 
Hi und danke für deine Antwort,

also:

PHP:
error_reporting(E_ALL);
spuckt keine Fehler aus, und die Verbindung zur DB steht auch zu 100%.

Hier nun nochmal das Script und ne kurze Erklärung:

PHP:
<?
include_once ("_data.php");

$conn = mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name,$conn);

$result1 = mysql_db_query($db_name,"SELECT id FROM $db_table ORDER BY score ASC"); 
//$result1 = mysql_db_query($db_name,"SELECT id FROM $db_table WHERE id IN (".implode(',', $app_friends).") ORDER BY score ASC");
																		
																		
$num = 1;

while($r = mysql_fetch_object($result1))
{
	$result = mysql_db_query($db_name,"SELECT * from $db_table WHERE id='{$r->id}'");
	$resultArray = mysql_fetch_array($result);
	$name = $resultArray["name"];
	$firstname = $resultArray["firstname"];
	$score = $resultArray["score"];
	$pic = $resultArray["pic"];
		
	if ($num<=$st_size) {
			if ($flash=1) {
				echo "&name$num=$name&firstname$num=$firstname&score$num=$score&pic$num=$pic";
			}
			$num++;
	}
}

mysql_close ($conn);
?>

Wenn ich dieses Script durchlaufen lasse mit dieser Zeile:

PHP:
$result1 = mysql_db_query($db_name,"SELECT id FROM $db_table ORDER BY score ASC");

Gibt er mir folgendes auf der index.php aus:
PHP:
&name1=Peter Muster&firstname1=Peter&score1=00:03:27&pic1=http://ak.fbcdn.net/v22941/1081/33/q1530469148_6610.jpg&name2=Manuel Muster&firstname2=Manuel&score2=00:44:00&pic2=http://ak.fbcdn.net/v22943/338/83/q100000538953504_7339.jpg1
Also ALLE Datensätze die in meiner DB stehen (hier nur zwei, sind aber mehr).

Zusätzlich schreibt er mir die Werte in meine dynamischen Texfelder in meinem Flashfilm. (Textfeld name1 -> Peter Muster , Textfeld firstname1 -> Peter usw.). Also funktioniert eigentlich alles wie es soll.

Meine Datenbank ist wie folgt aufgebaut:

----------------------------------------
|id|name|firstname|score|pic|
----------------------------------------

Jetzt möchte ich aber das er mir nur die Namen usw. ausgibt deren "id" identisch ist mit denen aus meiner Variablen $app_friends.
Bei

PHP:
echo "<pre>";
print_r($app_friends);
echo "</pre>";

gibt er mir folgendes aus:

PHP:
Array
(
    [0] => 1530469148
    [1] => 100000538953504
)

heißt die Arrays der Var kommen auch an. (Das sind die id´s der Nutzer die ich filtern möchte)

Sobbald ich nun die Zeile oben durch

PHP:
$result1 = mysql_db_query($db_name,"SELECT id FROM $db_table WHERE id IN (".implode(',', $app_friends).") ORDER BY score ASC");

ersetze bringt er mir durch das

PHP:
echo "&name$num=$name&firstname$num=$firstname&score$num=$score&pic$num=$pic";

in meinem Script zwar die Ausgabe auf meiner index.php

PHP:
&name1=Peter Muster&firstname1=Peter&score1=00:03:27&pic1=http://ak.fbcdn.net/v22941/1081/33/q1530469148_6610.jpg&name2=Manuel Muster&firstname2=Manuel&score2=00:44:00&pic2=http://ak.fbcdn.net/v22943/338/83/q100000538953504_7339.jpg1

aber er schreibt die Variablen bzw. Arrays nicht in meine Textfelder in meinem Flashfilm wie mit der oberen $result1 Zeile.


Ich glaube ich habe ein grundsätzliches Verständnisproblem in der ganzen Sache, nachdem ich nun die ganze Nacht am rumprobieren bin und nichts zählbares bei rum kommt.

Der implode Befehl "zereißt" ja eigentlich nur den Array damit die SELECT Abfrage richtig arbeiten kann oder? Deshalb verstehe ich nicht ganz warum das nicht mehr funktioniert wenn ich nur

PHP:
WHERE id IN (".implode(',', $app_friends).")

einfüge.


Puhhh..... ich hoffe ich habe nichts vergessen und ihr könnt mir irgendwie noch helfen... allein dauert das wohl noch etliche Stunden oder sogar Tage! ;-((


(Ich hoffe der Post ist nicht zulang)


Grüße
Patrick
 
Und was gibt das echo auf das genierte sql aus? Was es sein soll. ist klar, doch währe es interessant was wirklich drin steht.

Das generierte SQL dann mal mit phpMyAdmin testen und schauen wie das Resultat aussieht.

http://wiki.yaslaw.info/wikka/PhpDebugMySqlQueries#QueryStringtesten
2) Query-String testen
Führte der erste Schritt noch nicht zu einem Resultat, so können wir noch den generierten Query-String testen.
Dazu geben wir diesen mittels echo() aus. Zudem versuchen wir noch die Fehlermeldung herauszukriegen. Wir erweitern also das mysql_qeury() um die Errorausgabe mysql_error().

....

3) Testen mit phpMyAdmin
Um das Sql zu verfeiner kann man dieses nun aus der Ausgabe kopieren und mit phpMyAdmin testen und anpassen bis es funktioniert. Das funktionierende SQL anschliessend wieder zurück in den PHP-Code implentieren
 
Hi,
$app_usersist ein array, das kann man nicht einfach so einsetzen:

Das funktioniert by mir:

PHP:
$sql = "SELECT * FROM DEF_ALL_LANGUAGES WHERE AUTOID = ".$app_users[0]." ORDER BY TITLE_ID";

Modifiziere dein Select wie folgt:
PHP:
$sql1 = "SELECT id FROM $db_table WHERE id = ".$app_users[0]." ORDER BY score ASC"
Möchtest du mehrere user abfragen muss der Code wie folgt aussehen:
PHP:
$sql1 = "SELECT id FROM $db_table WHERE id in (".$app_users[0].",".$app_users[1].") ORDER BY  score ASC"
"ASC" ist nicht notwendig, da das by default erfolgt. (dient der Lesbarkeit)

Viel Erfolg! :)
 
Zurück