Home >Backend Development >PHP Tutorial >关于mysql的子查询

关于mysql的子查询

WBOY
WBOYOriginal
2016-06-23 14:24:38899browse

SELECT * FROM `x_shop` WHERE `id` IN(SELECT `sid` FROM `x_search` WHERE `id`=6)

SELECT `sid` FROM `x_search` WHERE `id`=6 的结果是  1,2

如何让第一句SQL实现  SELECT * FROM `x_shop` WHERE `id` IN(1,2)  的效果?



应用场景:为商家设置多个关键字(搜索),以下两种方案那种好一点?
1.建立一个表字段: id、key、sid  其中sid是记录商家ID
2.shop表中添加key字段,并设置全文索引




两个问题,求助


回复讨论(解决方案)

SELECT a.* FROM `x_shop` AS a, `x_search` AS b WHERE a.id = b.sid AND b.id=6

没其他需求就用2把,  原来SQL语句还能这样用  酷 

SELECT a.* FROM `x_shop` AS a, `x_search` AS b WHERE a.id = b.sid AND b.id=6


我的意思是SELECT `sid` FROM `x_search` WHERE `id`=6 的结果是  (1,2) 不是1或者2

没其他需求就用2把,  原来SQL语句还能这样用  酷 

全文索引性能是否很差

你主帖中的sql不行?

你主帖中的sql不行?

可是执行,但是假如结果为(1,2) 只查询1 其实也就是等于不行

in(1,2) 可以查询1和2 出来吧

in(1,2) 可以查询1和2 出来吧

SELECT * FROM `x_shop` WHERE `id` IN(1,2) 可以查询两条

SELECT * FROM `x_shop` WHERE `id` IN(SELECT `sid` FROM `x_search` WHERE `id`=6)  就不行,只能查到一条

你的“SELECT `sid` FROM `x_search` WHERE `id`=6 的结果是  1,2”
只说返回的是有一条记录且 sid 的值是“1,2”,是吗?
如果是则可写作
SELECT * FROM `x_shop` WHERE find_in_set(`id`,(SELECT `sid` FROM `x_search` WHERE `id`=6))

你的“SELECT `sid` FROM `x_search` WHERE `id`=6 的结果是  1,2”
只说返回的是有一条记录且 sid 的值是“1,2”,是吗?
如果是则可写作
SELECT * FROM `x_shop` WHERE find_in_set(`id`,(SELECT `sid` FROM `x_search` WHERE `id`=6))

版主V587

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn