Как заполнить этот код ниже? Я пытаюсь 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)");
Надеюсь, я это объяснил.
Я видел ответ на другом сайте здесь
Поэтому я адаптирую решение там к вашему сценарию. Измените 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. Не очень эффективный метод.
newsLocations
- 88,22
из базы данных? Разве это не только выбрать, если newsLocations
или 88
или 22
?
Если ваши данные разделены запятой, хранятся в столбце данных, то вы можете использовать MYSQL FIND IN SET, как показано ниже.
SELECT FIND_IN_SET ('b', 'a, b, c, d');
Или вы можете попробовать с регулярным выражением в MYSQL, но это будет слишком медленно.
Вы можете создать массив своих местоположений, а затем заполнить строку запроса элементами из массива
$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);
SELECT * FROM news WHERE newsLocation IN(0,1,
для меня по какой-то причине