如何完成下面的代码?我正在尝试从数据库中选择新闻
和位置
(可以是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
,即使结果只是 88,90,它也会获取
没有 newsLocation
22
。
$locationsToGet = '22,88';
$db->query("SELECT * FROM news WHERE newsLocation IN($locationstoGet)");
我希望我解释得很好。
最佳答案
我在另一个网站上看到了回复 here
所以我会根据您的情况调整解决方案。将locationsToGet 更改为数组,并使用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 过滤位置之外,您没有太多选择。这不是一个非常有效的方法。
关于php - MySQL PHP 选择 "X,Y"位于 X,Y,Z 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51176333/