Помощь с доработкой функционала движка
Прошу помочь мне с SQL запросом.
Сижу уже 4ый час, перековырял практически весь гугл, и не нашел ответа на поставленный вопрос, либо упустил его из-за незнания оного языка.
Суть в том, что в таблице prefix_blog есть поле blog_genre (жанр игры).
Я хочу сделать вывод игр по жанрам, но в этом поле есть такие значения как Action — с этим проблем не было, а есть значения MMO, RPG — вот тут я встал в ступор.
Т.е. если жанр обозначен просто как MMO выводятся все блоги с этим жанром, а если обозначен как MMO, RPG то этот блог не выводится.
Вот кусок кода из маппера блога (сам запрос, может быть дело именно в нем):
Я думаю что дело именно в запросе, а может из-за неправильного построения задуманного дела. Делал я все это по альтернативе с тэгами, но не создавал отдельную таблицу в БД с жанрами, уж очень это нагрузит слабую VDS.
Прошу оказать помощь, любому ответу буду рад (естественно кроме трололо и усмешек в сторону незнания мной 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 комментариев
blog_genre = «MMO, RPG»
искать не будет. хотя тут не очень понятно, есть ли у вас такой жанр
Вроде, понятно объяснил.
У меня было 2 идеи, сделать так, чтобы жанр у каждой игры был только один, либо сделать так, как сейчас. И оба варианта очень сложны. Просто у меня игр 2 с лишним тысячи, ручками обрабатывать долго, а с помощью SQL или PHP — придется все до мелочей подумывать.
blog_genre =?
{ or blog_genre =? }
и все в таком духе.
на мой взгляд правильней было бы создать две таблицы 1) описание жанра 2) связь топики — жанры.
в этом случае можно будет сделать кэширование, что ускорит выборку, описание жанра. и возможность быстро выбирать по скольугодным жанрам, ну и главные плюшки — возможность написать простенькую админку и добавлять/удалять жанры с помощью пары кликов мыши)
Я и не подозревал о возможностях такого метода.
Осталось рассортировать все эти блоги и выделить нужные в отдельную таблицу, рассортировав по жанрам.
Можете помочь? Как это лучше сделать? Сейчас все это дело в БД имеет такой вид.
Если поможет, могу выложить исходники добавленного в движок кода.
Если нет возможности сделать правильно, то делайте с использованием регулярных выражений — это нагрузит сильнее.
Но есть ещё один глупый способ (наверное глупее Вашего варианта, но без регулярок):
Делаете поле char и в него записываете строку nnnyynnynynyn — каждая буква отвечает за жанр, n — нет жанра, y — есть.
Например, есть жанры RPG, MMO, Action и игра это RPG и MMO тогда пишите yyn — ДаДаНет.
Тут выборку можно будет делать первый символ genre y AND второй y AND третий n.
К сожалению, не могу привести правильный SQL запрос, так как MySQL не использую. Но посмотрите в сторону функций работы со строками. Аналог substr в PHP.