Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записей из категорий / 7 сообщений из 7, страница 1 из 1
26.02.2016, 15:51
    #39179973
Xploder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей из категорий
Доброго времени суток, есть таблица новостей (news) - id | name, далее есть таблица категорий (cat) - id | name тоже все стандартно, ну и таблица связей (catnews) - id | news | cat. Вроде все просто и понятно. Но при выборке случился затык:
Код: sql
1.
SELECT news.* FROM news LEFT JOIN catnews ON catnews.news = news.id WHERE catnews.cat = 1 AND catnews.cat = 2 GROUP BY news.id ORDER BY news.id DESC 


то есть выбрать новости которые в ходят в две категории 1 и 2, если указываю по одиночке работает, все вместе нет. Понимаю что ошибаюсь с реализацией, но как исправить, пока мысли не приходят. Подскажите как это дело исправить, спасибо!
...
Рейтинг: 0 / 0
26.02.2016, 16:05
    #39179995
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей из категорий
Xploderвыбрать новости которые в ходят в две категории 1 и 2, если указываю по одиночке работает, все вместе нетПотому что условия проверяются для ОДНОЙ записи, а не для нескольких.

Xploderкак это дело исправитьДва подзапроса, для каждой категории. И оставить записи, присутствующие в обеих выборках.

PS. За каким хреном используешь ЛЕВОЕ связывание?
...
Рейтинг: 0 / 0
26.02.2016, 16:09
    #39180000
Xploder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей из категорий
Akina, отлично, а можно пример вашей реализации?
...
Рейтинг: 0 / 0
01.03.2016, 00:22
    #39182006
Xploder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей из категорий
пока в голову приходит только один вариант получения всех айди в подзапросе, без связывания в обще, это правильно с точки зрения нормализации?
Код: sql
1.
2.
3.
4.
5.
6.
SELECT 
   news.*
FROM 
   news
WHERE 
   news.id IN(SELECT catnews.news FROM catnews WHERE catnews.cat IN (1,2) GROUP BY catnews.news)
...
Рейтинг: 0 / 0
01.03.2016, 06:35
    #39182050
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей из категорий
Xploder, каким боком нормализация к запросам?
но в принципе правильно, только
1) если версия ниже 5.6, заменить ИН на ДЖОЙН
2) забыли хэвинг в подзапросе
...
Рейтинг: 0 / 0
01.03.2016, 09:14
    #39182092
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей из категорий
Xploder , если задача статическая, то решается тривиальным
Код: sql
1.
2.
3.
4.
select t1.news_id 
from table t1, table t2
where t1.news_id = t2.news_id
and t1.cat = 1 and t2.cat = 2


Если динамическая, то
Код: sql
1.
2.
3.
4.
5.
select table.news_id 
from table 
where table.cat in ({cat list})
group by table.news_id
having count([distinct] cat) = {cat_list_count}
...
Рейтинг: 0 / 0
01.03.2016, 22:15
    #39183084
Xploder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка записей из категорий
Akina, спасибо
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записей из категорий / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]