SQL Abfrage in Foreach

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

SQL Abfrage in Foreach

Beitrag von phillip »

Ich hab folgendes Problem:

Ich würde gerne in einer foreach-Schleife eine SQL Abfrage machen, bei dem jeder Wert des arrays überprüft wird, ob er in der Datenbank vorhanden ist.

angefangen hab ich das mal so:

Code: Alles auswählen

foreach ($artist as $key => $value) {


$sql = "SELECT * FROM artists_house WHERE artist_name = '$value'"; 

if (!($result = $db->sql_query($sql))) { 
        
          message_die(GENERAL_ERROR, 'Konnte die artists nicht laden!', '', __LINE__, __FILE__, $sql); 
        } 


if ( $row = $db->sql_fetchrow($result) ){
	echo $row['artist_name'];
	}

}
Das Problem ist nun, dass nur der erste Wert des Arrays ausgegeben wird...

Kann mir da jemand helfen?
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

weiss hier niemand was?
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Code: Alles auswählen

while ($row = $db->sql_fetchrow($result))
{
   echo $row['artist_name'];
}
Die Abfrage ließe sich aber ganz sicher auch so umschreiben, dass sie nicht in einer Schleife ausgeführt werden muss (Performance-Killer...).
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

Vielen Dank S2B, für deine Antwort.

Ja ich habs auch schon vorher mit der while versucht, aber auch das liefert mir nur immer die Ausgabe des ersten Elementes des Arrays.

Ich kanns sonst noch ein bisschen genauer schildern:

Code: Alles auswählen

$lineup = $row['lineup'];

$artist = explode(',', $lineup);

foreach ($artist as $key => $value) { 


$sql = "SELECT * FROM artists WHERE artist_name = '$value'"; 

if (!($result = $db->sql_query($sql))) { 
        
          message_die(GENERAL_ERROR, 'Konnte die artists nicht laden!', '', __LINE__, __FILE__, $sql); 
        } 


if ($db->sql_numrows($result)) { 

	while ( $row = $db->sql_fetchrow($result) ) 
	{ 
	echo $row['artist_name'];
	}
   } 

}

Ich hab das Array mal ausgeben lassen mit

Code: Alles auswählen

echo '<pre>';
print_r($artist);
echo '</pre>';
Es liefert mir das erwartete

Array
(
[0] => DJ SIGMA
[1] => House Rockers
[2] => DJ Alastair
[3] => Phil Guarana
)
Zuletzt geändert von phillip am 31.05.2008 13:14, insgesamt 1-mal geändert.
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Eine performantere Alternative wäre sowas:

Code: Alles auswählen

$sql = 'SELECT * FROM artists WHERE artist_name IN(' . str_replace("'", "''", $lineup) . ')';
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

Ja ist nicht schlecht, aber leider funktioniert das bei mir nicht.

Eigentlich will ich mit dem Ganzen erreichen, dass aus der langen stringkette $row['lineup'] alle artists durch einen Link ersetzt werden, die in unserer Datenbank stehen.

Und da jeder artist eine eigene Reihe hat, funktioniert das mit dem str_replace leider nicht...
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Irgendwie kann ich mir das gerade schlecht vorstellen... Könntest du mal einen größeren Ausschnitt aus deinem Code verlinken?
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

Ja klar, ich hab den Ausschnitt zwar jetzt noch ziemlich verkürzt:

Code: Alles auswählen

$template->set_filenames(array(
		'body' => 'event.tpl')
	);


$sql = "SELECT e.*, SUBSTRING(e.date, 9, 2) AS day,
SUBSTRING(e.date, 6, 2) AS month,
SUBSTRING(e.date, 1, 4) AS year,
SUBSTRING(e.date, 11, 6) AS time,
lo.*
        FROM events as e, event_locations as lo, labels as la
   	WHERE event_id = '$event_id' AND eventname <> '' AND e.location_id = lo.loc_id"; 

if (!($result = $db->sql_query($sql))) { 
        
          message_die(GENERAL_ERROR, 'Konnte den Event nicht laden!', '', __LINE__, __FILE__, $sql); 
        } 


	if ( $row = $db->sql_fetchrow($result) ) 
	{ 


// So die üblichen Zuweisungen, aber jetzt kommts:



if ($row['lineup'] != '')
{
$lineup = $row['lineup'];

$artist = explode(',', $lineup);


foreach ($artist as $key => $value) { 

$sql = "SELECT * FROM artists_house WHERE artist_name = '$value'"; 

if (!($result = $db->sql_query($sql))) { 
        
          message_die(GENERAL_ERROR, 'Konnte die artists nicht laden!', '', __LINE__, __FILE__, $sql); 
        } 


if ($db->sql_numrows($result)) { 

	if ( $row = $db->sql_fetchrow($result) ) 
	{ 
	echo $row['artist_name']; // 'echo', um die Resultate anzuschauen
	}
   } 

}


// Noch ein paar weitere Zuweisungen


$template->assign_block_vars('event', array(
	'' => $
	
	)
	); 

	


Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

S2B hat geschrieben:Irgendwie kann ich mir das gerade schlecht vorstellen... Könntest du mal einen größeren Ausschnitt aus deinem Code verlinken?
Ist das eigentlich so schwer zu verstehen? :roll:

KB:knigge
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
phillip
Mitglied
Beiträge: 933
Registriert: 20.03.2005 12:00

Beitrag von phillip »

ok sorry, ich hab das 'verlinken' übersehen :oops:

ja ich gib dir sonst mal die ganze datei:

http://www.phillip.ch/underground-new/events.phps
Antworten

Zurück zu „Coding & Technik“