Array in MySQL vergleichen

dsNDesign

Erfahrenes Mitglied
Hei,
folgendes Problem:
Ich habe eine Tabelle 'user'. In dieser Tabelle gibt es eine Spalte 'id' und eine Spalte 'usr_name'. Nun habe ich mehrere Usernamen der Spalte 'usr_name' in einem Array ('album_usr') gespeichert. Zu jedem Usernamen möchte ich nun die passende 'id' in ein extra Array einlesen. Die Abfrage kann ich ja so machen:

PHP:
foreach($album_usr => $a){
$select = "SELECT id FROM user WHERE usr_name = '$a'";
$ergebnis = $mysqli->query($select);

Dies müsste doch so stimmen oder?
Nur wie packe ich jetzt die 'id' in ein Array?

Gruß
 
Es gibt auch wesentlich schönere Variante dazu:
PHP:
$query = 'SELECT id FROM user WHERE usr_name IN("' . join('","', $album_usr) . '")';
$ergebnis = $mysqli->query($query);

Außerdem könntest du es noch schöner gestalten, wenn du mit JOINs arbeiten würdest. Dazu müsste man allerdings wissen, wie du das meinst mit "als Array ('album_usr') gespeichert".
 
eigentlich mit
PHP:
$row = mysql_fetch_array($ergebnis);
$ergebnis[] = $row['id'];

Das ist aber sehr unschön. Das kann viele Queries geben die abgesetzt werden. Dies verlangsamt das Script. Warum nicht alle auf einmal einlesen?
PHP:
$album_usr_sql_set = implode(',',$album_usr);
$sql = "SELECT usr_name, id FROM user WHERE FIND_IN_SET(usr_name,'{$album_usr_sql_set}')";
$result = mysql_query($sql)
while($row = mysql_fetch_array($result){
  $ids[$row['usr_name']] = $row['id'];
}

Ich habs mit grad nicht mit mysqli geschrieben. Kann man aber gut umschreiben.
 
Das array 'album_usr' besteht quasi aus Usernamen. Wenn ich das Array ausgeben lassen kommt folgendes (print_r($album_usr)):
Array ( [0] => User1 [1] => User2 [2] => User3 )
In meiner Tabelle sind die Namen User1, User2, User3 in der Spalte 'usr_name' gespeichert. Und da möchte ich nun jeweils zu jedem Namen die zugehörige id (Spalte 'id') in ein extra array speichern. Also ich benötige kein 2 Dimensionales Array, in welchem der Username direkt mit der ID verknüpft ist, da ich die User-IDs nur zum verarbeiten brauche.

Ich hoffe, man versteht mein Anliegen :)

EDIT:
Habs nun so:
PHP:
$album_usr_sql_set = implode(',',$album_usr);
		$sql = "SELECT usr_name, id FROM user WHERE FIND_IN_SET(usr_name,'{$album_usr_sql_set}')";
		$result = $mysqli->query($sql);
		while($row = $result->fetch_array()) {
			$ids[$row['usr_name']] = $row['id'];
		}

Bekomme jedoch folgenden Fehler:
Fatal error: Call to a member function fetch_array() on a non-object in [...] on line 15

line 15: $result = $mysqli->query($sql);
 
Zuletzt bearbeitet:
Na und? Dann nim mein oder Cracks Beispiel und lies den usr-Name nicht aus.
PHP:
$ids[] = $row['id'];
 
Ja, dein Beispiel hatte ich zu spät gesehen.

Habs nun so:
PHP:
$album_usr_sql_set = implode(',',$album_usr);
		$sql = "SELECT usr_name, id FROM user WHERE FIND_IN_SET(usr_name,'{$album_usr_sql_set}')";
		$result = $mysqli->query($sql);
		while($row = $result->fetch_array()) {
			$ids[$row['usr_name']] = $row['id'];
		}

Bekomme jedoch folgenden Fehler:
Fatal error: Call to a member function fetch_array() on a non-object in [...] on line 15

line 15: $result = $mysqli->query($sql);

EDIT: Erledigt, hatte ein ' vergessen. Funktioniert nun perfekt. Danke dafür.
 
Zuletzt bearbeitet:
$mysqli ist nicht initialisiert - oder fehlerhaft. Auf alle Fälle kein Objekt vom Typ Mysqli. Der Fehler muss also vor diesem Script-Abschnitt sein.
 

Neue Beiträge

Zurück