2016-05-03 8 views
0

SQL in 'Dienste' Spalte Ich habe ein Array Werte wie zB: 2,19,72,5,46,45,38,40,36, 27,29SQL Wählen Sie, wo IN (Array) nur zurückgibt, wenn das erste Element im Array gefunden wurde

Für diese Reihe von DB Auswahl ich bin mit dieser Abfrage:

SELECT * FROM myTable WHERE `services` IN (2,19) 

Und es funktioniert OK. Aber, wenn ich Änderungen in "IN" Schließung wie folgt mache:

SELECT * FROM myTable WHERE `services` IN (19) 

es gibt immer 0 Zeilen zurück. Die Abfrage sucht nur nach dem ersten Wert in der Spalte. Warum passiert das und wie kann ich meine Abfrage so ändern, dass sie korrekt funktioniert?

Vielen Dank im Voraus.

+0

Was ist die Struktur myTable? Datentypen, etc. –

+0

Abfrage als SELECT * FROM myTabelle schreiben WHERE Dienste IN (2,19) –

+0

Die Spalte Services hat Werte wie 2,19,72,5,46,45,38,40,36,27,29? –

Antwort

0

Aktualisieren Sie Ihre Abfrage wie: Wenn Sie nur Einzelwert suchen ...

SELECT * FROM myTable WHERE concat(',',`services`,',') like '%19%' 

Aber wenn Sie wollen um 19,2 oder 2,40 oder 40,19 zu suchen, wird es nicht funktionieren. für diesen Fall müssen Sie Abfrage dynamisch schreiben

0

Verwenden Sie den folgenden Code: -

$recordsArr = [2,19,72,5,46,45,38,40,36,27,29]; // Your array 
$records = implode(',', $recordsArr); // Your string 
$sql="SELECT * FROM myTable WHERE services IN($records)"; // Your query 

Hoffe, es wird Ihnen helfen :-)

0

Ihre Daten als Text gespeichert ist, so dass Sie dies tun müssen: Dieses

SELECT * FROM myTable WHERE `services` LIKE '%,2,%' OR `services` LIKE '2,%' OR `services` LIKE '%,2' OR services` LIKE '%,19,%' OR `services` LIKE '19,%' OR `services` LIKE '%,19' 

ist sehr langsam und wird sehr schnell kompliziert. Sie sollten eine andere Möglichkeit finden, Ihre Daten zu speichern.

0

SELECT * FROM myTable WHERE FIND_IN_SET ('$ array', 'Dienstleistungen')