请帮助找出搜索的正确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/

10-16 07:43