请帮助找出搜索的正确SQL语句。我使用SELF-JOIN,得到了正确的结果,但是我不能让CONCAT_WS
以正确的方式工作。
数据:
id基本id名称类型
20外星隔离基地
50外星人对捕食者基地
400外星人对捕食者经典2000基地
60刺客信条基地
8 2公司锁定DLC
9 2机组人员消耗性DLC
102外伤性DLC
11 2最后幸存者DLC
12 2避风港
13 2失去联系的数据链路连接器
14 1触发DLC
22 0奇观时代III基地
23 2外星人蝙蝠侠DLC
选择所有基本游戏:
选择games.id,games.name,games.type,COUNT(dlc.base_id)作为dlc_COUNT
从游戏中
左加入游戏dlc
在games.id=dlc.base上
其中games.base_id=0
按games.id分组
按游戏排序。名称ASC
限制0,10
结果:
id名称类型dlc\u count
22奇观时代III基础0
2外星隔离基地7
4外星人对捕食者经典2000基础0
5外星人对捕食者基地0
6刺客信条基地0
搜索显示dlc基本名称的单词“alien”
选择games.id,CONCAT-WS('->,games.name,dlc.name)作为名称,games.type,COUNT(dlc.base-id)作为dlc-u COUNT
从游戏中
左加入游戏dlc
在games.id=dlc.base上
WHERE MATCH(games.name)对布尔模式下的('alien*')
按games.id分组
按游戏排序。名称ASC
限制0,10
我得到这些结果:
id名称类型dlc\u count
23外星人蝙蝠侠DLC 0
2外星人隔离->企业封锁基地7
4外星人对捕食者经典2000基础0
5外星人对捕食者基地0
它们应该是:
id名称类型dlc\u count
23外星人隔离->外星人蝙蝠侠DLC 0
2外星隔离基地7
4外星人对捕食者经典2000基础0
5外星人对捕食者基地0
最佳答案
试试这个SQL
select
id,
concat_ws(
' -> ',
( select base.name from games as base where base.id = games.base_id ),
name
) as concat_name,
games.type,
( select count(dlc.base_id) from games as dlc where dlc.base_id = games.id ) as dlc_count
from games where
match(name) against('alien*' in boolean mode)
order by name asc
limit 0, 10
关于mysql - 用SELF JOIN搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30454370/