MySQL PHP выбрать, где "X, Y" в X, Y, Z - PullRequest
0 голосов
/ 04 июля 2018

Как мне заполнить этот код ниже? Я пытаюсь select news из базы данных и locations, которые могут быть 23,22,88,90 кодами местоположения. Я знаю, что вы можете просто сделать IN('23', '22', '88', '90'), но проблема в том, что мои местоположения - это строка, поэтому она выглядит как IN('23,22,88,90') Я считаю.

Как развернуть строку местоположений и выбрать все или любые, включая местоположения в строке? Таким образом, в базе данных newsLocations может быть 22 23 22,90 23,80,90 90. Если это имеет смысл? так что если $locationstoGet имеет только 22,88,90, он получит newsLocation, даже если результат будет 88,90 без 22.

$locationsToGet = '22,88';
$db->query("SELECT * FROM news WHERE newsLocation IN($locationstoGet)");

Надеюсь, я все объяснил.

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Вы можете создать массив ваших местоположений, а затем заполнить строку запроса элементами из массива

$locations = '22,88';
$locationsToGetArray = explode(",", $locationToGet)
$query = "SELECT * FROM news WHERE newsLocation IN(";
for ($i = 0; $i < count($locationsToGetArray); $i++) {
    $query .= $locationsToGetArray[$i];
    if($i == (count($locationToGetArray) - 1)) $query.= ")";
    else $query .= ",";
 }
 $db->query($query);
0 голосов
/ 04 июля 2018

Я видел ответ на другом сайте здесь

Так что я буду адаптировать решение там к вашему сценарию. Измените locationToGet в массив и используйте функцию implode для генерации правильного синтаксиса для предложения IN.

$locationsToGetArr = array('22','88');
$locations = "'".implode("','",$locationsToGetArr)."'"; //this should output '22','88'
$db->query("SELECT * FROM news WHERE newsLocation IN($locations)");

Это решение предполагает, что структура вашей базы данных такова

+--------+--------------+
|  news  | newsLocation | 
+--------+--------------+
|   1    | 88           | 
|   1    | 22           |
|   2    | 22           |
|   2    | 88           |
+--------+--------------+

Но если вы храните ваши данные в следующем виде

    +--------+--------------+
    |  news  | newsLocation | 
    +--------+--------------+
    |   1    | 88,22        | 
    |   2    | 22,88        |
    +--------+--------------+

У вас не будет большого выбора, кроме как выбрать все из таблицы новостей и сделать так, чтобы PHP отфильтровал местоположение. Не очень эффективный метод.

0 голосов
/ 04 июля 2018

Если ваши данные разделены запятыми и хранятся в столбце базы данных, вы можете использовать MYSQL FIND IN SET, как показано ниже.

SELECT FIND_IN_SET ('b', 'a, b, c, d');

ИЛИ вы можете попробовать использовать регулярные выражения в MYSQL, но это будет слишком медленно.

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