2016-09-24 4 views
1

Ich habe eine Tabelle in der Datenbank. Es enthält 3 Spalten: ID, Name, Typ. Ich habe ein Array in meinem PHP-Skript mit einigen dieser IDs (nicht in irgendeiner Reihenfolge, vielleicht Duplikate). Ich möchte diese Elemente aus der Tabelle aussprechen, die ich im Array IDs habe. Ich habe versucht, dies zu tun mit einem for-Schleife:Optimierung durch Ändern auf einzelne Abfrage statt in eine Schleife

$items = array(1, 8, 5, 3, 2, 1, 5, 5); 
for ($i=0; $i < count($items); $i++) { 
    $query = mysqli_query($connect, "SELECT * FROM weapons WHERE id='$items[$i]'"); 
    $row = $query->fetch_assoc(); 

    echo $row['name'] . ', ' . $row['type']; 
} 

Ich denke, es ist nicht gut Praxis Rufabfrage in einer Schleife zu verwenden, denn wenn die Schleife zu groß wird, ist es, dass der Prozess verlangsamen kann. Was kann ich erreichen, ohne die Abfrage in eine Schleife zu stellen?

+0

Sie können mit 'IN' statt' = '. Überprüfen Sie diese http://stackoverflow.com/questions/16240041/sql-search-multiple-values-in-same-field –

+0

@ AmanRawat Diese Methode funktioniert nicht mit Duplikaten. Wenn ich das selbe mehr als einmal im IN-Selektor habe, würde es nur einmal kommen. Was soll ich ändern? – StanUdachi

Antwort

3

Verwenden IN Schlüsselwort für diese

$query = mysqli_query($connect, "SELECT * FROM weapons WHERE id IN (1, 8, 5, 3, 2,5) "); 
+0

Dies ist eine sehr gute Möglichkeit, dies ohne unnötige Schleifen zu tun. – DanielTheGeek

+0

Dies funktioniert nicht für Duplikate. Wenn ich zum Beispiel Nummer 5 mehr als einmal habe, gibt die Abfrage es nur einmal zurück. – StanUdachi

+0

@StanUdachi, Warum sollte jemand die gleiche Abfrage zweimal ausführen? – goseo

0
$query = mysqli_query($connect, "SELECT * FROM weapons WHERE id IN (1, 8, 5, 3, 2,5) "); 
while($row = $query->fetch_assoc()) 
{ 
echo $row['name'] . ', ' . $row['type']; 
}