Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择时将MySQL连接到列_Mysql - Fatal编程技术网

选择时将MySQL连接到列

选择时将MySQL连接到列,mysql,Mysql,我在这里处理的是一个遗留数据库,在编写搜索查询时遇到了一些问题 相关的两个表是产品和旅游(每个产品有多个) 我的一般查询如下所示: SELECT products.*, tours.* FROM products INNER JOIN tours ON products.id=tours.product_id GROUP BY products.id 现在我遇到了麻烦。产品表包含一列,国家,这是一个国家id的管道分隔列表,如下所示:13 | 45 | 33 | 29 | 133 | 337。

我在这里处理的是一个遗留数据库,在编写搜索查询时遇到了一些问题

相关的两个表是
产品
旅游
(每个产品有多个)

我的一般查询如下所示:

SELECT products.*, tours.* FROM products INNER JOIN tours 
ON products.id=tours.product_id
GROUP BY products.id
现在我遇到了麻烦。
产品
表包含一列,
国家
,这是一个国家id的管道分隔列表,如下所示:
13 | 45 | 33 | 29 | 133 | 337
。我需要返回一个
产品
的列表,例如,国家
33

为简单起见,我可以使用
where products.country,比如“%33%”
,但这将返回
133
337
。我需要使用
where products.country,如“%|33 |%”
,但如果它们是第一个或最后一个,这将与它们不匹配。因此,在选择时,我需要在列值的任一端附加一个管道,这会给我留下如下内容:

SELECT products.*, tours.*, CONCAT("|",products.countries,"|") AS country_list
FROM products INNER JOIN tours ON products.id=tours.product_id
GROUP BY products.id
但是,如果我尝试添加
国家/地区列表,如“|%33%|”
,我会得到一个
“未定义索引:国家/地区列表”
错误

我做错了什么?

您可以使用:

WHERE CONCAT("|",products.countries,"|") LIKE '%|33|%'

请注意,管道位于百分比符号内,别名在WHERE子句中不可用。只是因为有条款

可以在查询选择列表中使用别名为列指定其他名称。可以在GROUP BY、ORDER BY或HAVING子句中使用别名来引用该列

所以你可以

HAVING country_list LIKE '|%33%|'

或者Scott发布的没有别名的sament。

试试WHERE products.countries,比如“%33%”、@helle,它们也会匹配
133
337
,这是不正确的。我知道,你不能在WHERE子句中引用别名,是吗?很好,这很有效。对错误有什么解释,为什么我不能选择它?谢谢。我使用了斯科特的解决方案,但我接受这个方案,因为我认为它最好地回答了这个问题。