2016-05-09 4 views
0

In meinem db habe ich eine Tabelle, Zeitplan wo ein Feld Betreff ist. Es wird Wert wie folgt halten. Beispielsweise. 1,2,3,4Auswahl der Zeilen in MySQL mit Arrays

Nun Ich brauche dieses Feld mit meinem Array

$mysubs=array('1','3','5'); 

ich dies versucht haben, genannt zu vergleichen.

select * from Timetable where Subject IN (".implode(',',$mysubs)."); 

Aber wenn ich nur einen Wert im Betrefffeld habe, funktioniert es. Wenn es etwas 1,2,3 hält, dann funktioniert es nicht. Ist es möglich, mit 'LIKE' übereinzustimmen? Plz help me

Antwort

0

irgendeine Sache Versuchen so, wenn subject Feldwert ist Komma getrennt.

$mysubs = array('1','3','5'); 
$whereSubClause = ''; 
for($i=0; $i < count($mysubs); $i++){ 
    $whereSubClause .= 'FIND_IN_SET($i,subject) OR '; 
} 
// Remove the last OR 
$whereSubClasue = substr($whereSubClause,0,-3); 
// now query 
select * from Timetable where $whereSubClause; 

Aber wenn es nicht Komma getrennt tun wie folgt aus:

$values = implode("','",$mysubs); 
"select * from Timetable where subject IN('".$values."');" 
+0

Anstelle der Verwendung und Sie müssen verwenden oder sonst wird es nicht funktionieren, da es die Datensätze überspringen einige der Partie SELECT * FROM Fahrplan WHERE FIND_IN_SET (‚1‘, 'Subject') mit ODER FIND_IN_SET ('3', 'Betreff') ODER FIND_IN_SET ('5', 'Betreff') –

+0

@HardevSharma Ja, du hast Recht. –

+0

ja. das funktioniert für mich .. danke dir sir .. – athi

0

Diese Abfrage

$sql = "select * from Timetable where Subject LIKE '".implode(',',$mysubs)."%'"; 

Es kann Ihnen helfen.

0
$values = implode(',',$mysubs); 
$query = "select * from Timetable where Subject IN ($values)"; 

ich, dass in einigen meiner Projekte und es funktioniert gut

i denkt, dass es auch besser ist, Abfrage und PHP-Operationen zu trennen, zumindest für eine bessere Lesbarkeit des Codes

0

Diese Arbeit sollte:

$mysubs = array(1, 3, 5); 
$sql = "SELECT * FROM Timetable WHERE Subject IN (".implode(', ', $mysubs).");"; 

Das sollte Ausgang dieses:

$sql = "SELECT * FROM Timetable WHERE Subject IN (1, 3, 5);"; 

Es ist generell gute Praxis in SQL, um Teile von die Sprache wie SELECT, INSERT oder UPDATE. Auch Ihr Array von Werten, nach denen Sie in $ mysubs suchen, waren Strings, obwohl es besser ist, sie als Ganzzahlen zu haben.

0

Sie müssen das Feld mit Anhängen und Voranstellen von Komma speichern.

Zum Beispiel:

,1,2,3,4, ODER ,11,12,23,45,

Und Sie müssen für jedes Array-Element suchen.

$mysubs=array('1','3','5'); 

select * from Timetable where Subject LIKE '%,1,%' OR 
Subject LIKE '%,3,%' Subject LIKE '%,5,%' 
+0

Es funktioniert, wenn mein Array in Ordnung ist. meint. Wenn das Feld subject den Wert 1,2,4,3. Enthält, dann ist, wenn mein All-Sub-Array $ allsub = (1,2,4) oder (2,4) oder (4,3) oder (1,2, 4) lke das, damit es gut funktioniert.Else Wenn mein allsub-Array 1,3,4 ist, wird nicht die genaue Zeile ausgewählt – athi