Использование массива PHP для поиска столбца в БД SQL, разделенного запятыми - PullRequest
0 голосов
/ 24 июня 2018

У меня есть столбец в моей БД, помеченный провайдерами.Этот столбец может иметь несколько значений, т. Е. (1,2,3,4,5) или (14,2,9,87).У меня есть массив, который также заполнен аналогичными значениями, например (1,9,7,3) и т. Д.

Я пытаюсь запросить мою базу данных и вернуть результаты из таблицы, где любое из значений вМассив переменных соответствует значениям, разделенным запятыми в столбце.

Это то, что у меня есть.

$variable = "1,9,3,4"; $sql = "SELECT id, provider FROM table_name WHERE FIND_IN_SET(provider, '$variable')";

Однако это не работает.Если столбец в БД имеет более одного значения, он ничего не возвращает.Если столбец имеет только одно значение, он возвращает его в порядке.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

CSV должен быть вторым параметром вашего find_in_set. Первым должно быть значение single , которое вы ищете. Таким образом, вы должны разделить $variable на несколько значений. Как то так:

$variable = "1,9,3,4";
$values = str_getcsv($variable);
foreach($values as $value) {
    $sql = "SELECT id, provider FROM table_name WHERE FIND_IN_SET($value, provider)";
    //execute $sql here
}

должен это сделать.

При вашем предыдущем подходе find_in_set искал 1,9,3,4, а не 1, 9, 3 или 4, как вы хотели. В руководстве также описывается поведение с использованием этой функции, которое не будет работать.

Эта функция не работает должным образом, если первый аргумент содержит запятую (,).

Вам следует обновить таблицу в будущем, когда у вас будет время, чтобы она нормализовалась.

0 голосов
/ 24 июня 2018

Я не уверен, но LOCATE должен решить вашу проблему. Пример:

$sql = "SELECT id, provider FROM table_name WHERE LOCATE('$variable', provider) = 1;";

, но не работает, если порядок идентификаторов отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...