php - MySQL PHP 选择 "X,Y"位于 X,Y,Z 中的位置

标签 php mysql sql explode implode

如何完成下面的代码?我正在尝试从数据库中选择新闻位置(可以是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/

相关文章:

sql - 为什么我在此 SQL 查询期间得到空白返回值?

php - 如何用正则表达式匹配 400 到 550 之间的数字?

php - 有谁知道这个 php 错误消息背后的含义吗?

c# - 错误 :Could not load file or assembly 'DocumentFormat. OpenXml,

php - 将数据库导出到php中excel文件中的不同工作表

mysql - 如何在 MySQL 中的 Time_Stamp 列上创建索引?

php - 如何在 JOIN 查询结果中识别来自不同表的同名字段?

php - 获取媒体 :thumbnail from XML

sql - 土耳其语言设置的奇怪行为

c# - Linq to SQL Left Join、Order 和 Group By Count