Mysql选择带有两个stringlist的find_in_set

时间:2010-09-21 14:28:56

标签: php mysql select

我在我的表中输入了这两行:

1, 'Halo: Reach', 2010, ''fps','sci-fi'', '"The best game of the year".', 'Microsoft', 'Bungie', 'XBOX 360', 9.5, 'http://wuwb.com/wp/wp-content/uploads/2009/06/halo_reach.thumbnail.jpg', '', ''

2, 'FIFA 11', 2010, 'sport,soccer', '"The best soccer game ever"', 'EA', 'EA', 'PC, XBOX 360, PS3', 10, 'http://wuwb.com/wp/wp-content/uploads/2009/06/halo_reach.thumbnail.jpg', '', ''

在我的PHP脚本中,我得到了:

$Genres = "sci-fi,sport,soccer"; // After using the sumbit button

我需要制作一个按类型排序的选择查询,因此FIFA 11将是第一个而晕:达到第二个。所以我尝试使用find_in_set但它没有使用两个字符串列表。

我想到的唯一选择是为每个类型的IN子句和一些字段排序并限制,但我认为这是非常糟糕的方法。

2 个答案:

答案 0 :(得分:0)

IN子句是要走的路。 只需通过在PHP中引用/转义它来准备类型数组,然后使用逗号分隔符将其内爆。

SELECT * FROM tbl_games WHERE genre IN ('sci-fi', 'sport'...) ORDER BY genre

答案 1 :(得分:0)

我找到了更好的方法:D

我创建了一个新表(gamesgenres),因此对于每个游戏我都有一些行。

SELECT count(games.id) as relevance, GROUP_CONCAT(gamesgenres.genre) as genres, games.* FROM games, gamesgenres WHERE ('sci-fi' IN (gamesgenres.genre) OR 'soccer' IN (gamesgenres.genre) OR 'fps' IN (gamesgenres.genre)) AND gamesgenres.game = games.genres group by games.id ORDER BY relevance DESC;