2010-09-21 3 views
0

я получил в моей таблице этого 2 строки:Mysql выбрать с FIND_IN_SET с двумя StringList

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 предложение и порядок по некоторым полям и делать ограничения, но я думаю, что это действительно плохой способ сделать это.

ответ

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; 
0

Вступление - это путь. Просто подготовьте массив жанров, указав/экранируя его в PHP, а затем взорвите его с помощью разделителя запятой.

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

Смежные вопросы