Mysql выберите с помощью find_in_set с двумя списками строк

0

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

Единственный вариант, о котором я подумал, - это сделать для каждого раздела и порядка в некоторых разделах и сделать ограничения, но я думаю, что это действительно плохой способ сделать это.

Теги:
select

2 ответа

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
Предложение

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню