Я получил в своей таблице эти 2 строки:
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 script я получил:
$Genres = "sci-fi,sport,soccer"; // After using the sumbit button
Мне нужно сделать выборный запрос, упорядочивающий по жанрам, поэтому FIFA 11 будет первым и halo: достигнем второго. Поэтому я попытался использовать find_in_set, но не работал с двумя строковыми списками.
Единственный вариант, о котором я подумал, - это сделать для каждого раздела и порядка в некоторых разделах и сделать ограничения, но я думаю, что это действительно плохой способ сделать это.
Я нашел лучший способ: 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;
IN - это путь. Просто подготовьте массив жанров, указав/экранируя его в PHP, а затем размотайте его с помощью разделителя запятой.
SELECT * FROM tbl_games WHERE genre IN ('sci-fi', 'sport'...) ORDER BY genre