mysql php选择“x,y”在x,y,z中的位置

yftpprvb  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(458)

如何完成下面的代码?我正在努力 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 . 这有道理吗?所以如果 $locationstoGet22,88,90 只是,它会得到 newsLocation 即使结果只是 88,90 没有 22 .

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

我希望我能解释清楚。

qrjkbowd

qrjkbowd1#

如果您的数据以逗号分隔存储在database列中,那么您可以使用mysql find in set,如下例所示。
在_集合中选择find_('b','a,b,c,d');
或者你可以尝试在mysql中使用正则表达式,但是速度太慢了。

eh57zj3b

eh57zj3b2#

您可以创建一个位置数组,然后用数组中的项目填充查询字符串

$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);
92vpleto

92vpleto3#

我在另一个网站上看到了回应
所以我会根据你的情况调整解决方案。将locations更改为进入数组,并使用内爆函数为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        |
    +--------+--------------+

除了从news表中选择all和让php过滤位置之外,您将没有太多选择。不是很有效的方法。

相关问题