SELECT `osid`,`os_name`,
(SELECT count(*)
FROM `game_game`
WHERE concat(',',`os`,',') LIKE ('%,`os`.`osid`,%') ) as game_count
FROM `game_os` AS os ORDER BY `osid`
两个 SQL 表
game_os
osid (PK)
os_name
game_game
game_id (PK)
game_name
os (save data format : 1,2,3) (1,2,3 = osid)
此 SQL 查询,game_count永远不会 = 0
我觉得也许'%,os
.osid
,%' 因为os
.osid
在"XX"<中——>
我该如何解决这个问题?
我需要在某个操作系统中获取多少游戏
您需要
concat()
like
:
SELECT osid, os_name,
(SELECT count(*)
FROM game_game
WHERE concat(',', os, ',') LIKE CONCAT('%,', os.osid, ',%')
) as game_count
FROM game_os AS os
ORDER BY osid;
但是,您也可以使用 find_in_set()
编写此内容,因为您使用逗号作为分隔符:
SELECT osid, os_name,
(SELECT count(*)
FROM game_game
WHERE find_in_set(os.osid, os) > 0
) as game_count
FROM game_os AS os
ORDER BY osid;