Помощь с доработкой функционала движка

Прошу помочь мне с SQL запросом.
Сижу уже 4ый час, перековырял практически весь гугл, и не нашел ответа на поставленный вопрос, либо упустил его из-за незнания оного языка.

Суть в том, что в таблице prefix_blog есть поле blog_genre (жанр игры).
Я хочу сделать вывод игр по жанрам, но в этом поле есть такие значения как Action — с этим проблем не было, а есть значения MMO, RPG — вот тут я встал в ступор.
Т.е. если жанр обозначен просто как MMO выводятся все блоги с этим жанром, а если обозначен как MMO, RPG то этот блог не выводится.


Вот кусок кода из маппера блога (сам запрос, может быть дело именно в нем):

SELECT
	blog_id
FROM
	".Config::Get('db.table.blog')."
WHERE
	blog_genre = ?
	{ AND blog_id NOT IN (?a) }
ORDER BY blog_rating DESC
LIMIT ?d, ?d ";


Я думаю что дело именно в запросе, а может из-за неправильного построения задуманного дела. Делал я все это по альтернативе с тэгами, но не создавал отдельную таблицу в БД с жанрами, уж очень это нагрузит слабую VDS.

Прошу оказать помощь, любому ответу буду рад (естественно кроме трололо и усмешек в сторону незнания мной sql).

8 комментариев

avatar
я бы на вашем месте создал таблицу. потому что в таком виде

blog_genre = «MMO, RPG»

искать не будет. хотя тут не очень понятно, есть ли у вас такой жанр
avatar
Просто у меня были догадки, что поиск можно сделать не полнотекстовый, т.е. чтобы результаты выводились не только те, которые полностью совпадают, а еще те, которые совпадают частично.
Вроде, понятно объяснил.

У меня было 2 идеи, сделать так, чтобы жанр у каждой игры был только один, либо сделать так, как сейчас. И оба варианта очень сложны. Просто у меня игр 2 с лишним тысячи, ручками обрабатывать долго, а с помощью SQL или PHP — придется все до мелочей подумывать.
avatar
тогда нужно курить на тему

blog_genre =?
{ or blog_genre =? }

и все в таком духе.

на мой взгляд правильней было бы создать две таблицы 1) описание жанра 2) связь топики — жанры.
в этом случае можно будет сделать кэширование, что ускорит выборку, описание жанра. и возможность быстро выбирать по скольугодным жанрам, ну и главные плюшки — возможность написать простенькую админку и добавлять/удалять жанры с помощью пары кликов мыши)
avatar
Интересно, спасибо, открыли глаза ;)
Я и не подозревал о возможностях такого метода.
Осталось рассортировать все эти блоги и выделить нужные в отдельную таблицу, рассортировав по жанрам.
Можете помочь? Как это лучше сделать? Сейчас все это дело в БД имеет такой вид.
avatar
напишите мне завтра в icq. постараюсь объяснить
avatar
В общем пока еще подожду, ибо сейчас делать серьезные телодвижения — глупо. Может я просто что-то упустил, а кто нибудь сможет ткнуть меня носом. В любом случае нужно думать…

Если поможет, могу выложить исходники добавленного в движок кода.
avatar
Делал я все это по альтернативе с тэгами, но не создавал отдельную таблицу в БД с жанрами, уж очень это нагрузит слабую VDS.
Зря.
Если нет возможности сделать правильно, то делайте с использованием регулярных выражений — это нагрузит сильнее.
Но есть ещё один глупый способ (наверное глупее Вашего варианта, но без регулярок):
Делаете поле char и в него записываете строку nnnyynnynynyn — каждая буква отвечает за жанр, n — нет жанра, y — есть.
Например, есть жанры RPG, MMO, Action и игра это RPG и MMO тогда пишите yyn — ДаДаНет.
Тут выборку можно будет делать первый символ genre y AND второй y AND третий n.
К сожалению, не могу привести правильный SQL запрос, так как MySQL не использую. Но посмотрите в сторону функций работы со строками. Аналог substr в PHP.
avatar
Я уже решил с randomtoy как это можно реализовать.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.