2014-12-05 52 views
1
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表單引號查詢不CONCAT()工作

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。 ,%'因爲os。 在'XX' < -

我該如何解決這個問題?

我需要得到多少遊戲在某一操作系統

回答

3

需要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; 
+0

感謝您的幫助和建議 – Sky 2014-12-05 17:07:03