SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.01.2011 20:51:20

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Проблема с SQL-запросом

Пишу модуль для блога и вот спотыкнулся над запросом

Есть 2 таблицы cms_users и cms_post
1ая с данными об авторах (пользователях)
2ая с их статьями

Нужен вывод данных пользователя и сформировать ссылку на последнюю статью, из определенной категории новостей (WHERE p.category=2). Без дублей - это значит нужно видеть только уникальные имена авторов, которые написали там статью.

Пробывал через JOIN ON с DISTINCT - не уникализирует.

SELECT DISTINCT u.name, u.user_id, u.email, u.news_num, u.comm_num, u.info, u.foto, u.fullname, u.land, p.id, p.title, p.category FROM (SELECT DISTINCT * FROM cms_users u JOIN cms_post p ON u.name=p.autor WHERE p.category=2)  ORDER BY p.id DESC

Начал упрощать запрос и выяснил, что даже такой запрос не делает уникальным по автору

SELECT DISTINCT (p.autor), p.id, p.title, p.category FROM cms_post p WHERE p.category=2 ORDER BY p.id

Помогите плиз выкрутится.

Неактивен

 

#2 12.01.2011 21:48:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема с SQL-запросом

Если я правильно понял, то действует еще ограничение, что у статьи всегда
один автор, а вывести надо не последнюю статью, а вывести для каждого
автора, писавшего в категории, его последнюю статью.

Если так — то хорошо этот вопрос решить нельзя. Можно решить плохо smile
Например:
SELECT author, MAX(id) AS id FROM cms_post WHERE category = 2 GROUP BY 1 ORDER BY 2

К этому уже можно присоединить данные:
SELECT u.name, p.title
FROM cms_users u, cms_post p, (... подзапрос ...)s
WHERE p.id = s.id AND u.name = p.author.

Кстати, лучше хранить id пользователей, а не имена, если у Вас не могут
писать анонимные пользователи.

Неактивен

 

#3 13.01.2011 11:40:19

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Re: Проблема с SQL-запросом

Спасибо. Помогли здорово. Не найду куда поставить + sad
На счет имен чуть не понял. Мне нужен вывод на странице списка ников и полных имен авторов, одними id не обойтись. Анонимные у меня не могут писать.

Неактивен

 

#4 13.01.2011 14:39:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема с SQL-запросом

u.name = p.author
Вот эта связь меня смущает. Куда лучше в post хранить id автора,
а не его имя.

Неактивен

 

#5 13.01.2011 14:58:18

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Re: Проблема с SQL-запросом

paulus написал:

u.name = p.author
Вот эта связь меня смущает. Куда лучше в post хранить id автора,
а не его имя.

Это уж не ко мне. Это к автору движка DLE. Еще раз спасибо за помощь.

Неактивен

 

#6 19.07.2011 12:10:17

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Re: Проблема с SQL-запросом

Уважаемый Paulus, не поможешь еще раз?
Вот ни как не соображу как изменить запрос.
Итак задача.
Я выводил 1ну, последнюю статью авторов по id из категории. Запрос получился такой:
SELECT u.name, u.user_id, u.email, u.news_num, u.comm_num, u.info, u.foto, u.fullname, u.land, p.id, p.title, p.date
FROM cms_users u, cms_post p, (SELECT autor, MAX(id) AS id FROM cms_post WHERE category = 2 GROUP BY 1 ORDER BY 2) s
WHERE p.id = s.id AND u.name = p.autor
ORDER BY p.id DESC LIMIT 0,20;

А теперь я хочу сделать список из 10 статей каждого автора, который писал в эту категорию (category = 2).
Я так понимаю надо изменить лишь подзапрос. Увеличить подмножество. Спасибо.

Неактивен

 

#7 20.07.2011 10:39:56

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Re: Проблема с SQL-запросом

как ораничить выборку внутри групп?
В каждой группе не больше 10 строк

Отредактированно Aqula (20.07.2011 13:24:23)

Неактивен

 

#8 21.07.2011 22:33:10

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Re: Проблема с SQL-запросом

Нет пока идей?

Неактивен

 

#9 10.08.2011 16:04:55

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Re: Проблема с SQL-запросом

может как нибудь можно при помощи предикатов top 10 и подобных?

Неактивен

 

#10 10.08.2011 16:20:04

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проблема с SQL-запросом

Предикатов типа top 10 в MySQL нет.

Как выбрать 10 последних статей каждого автора см http://sqlinfo.ru/forum/viewtopic.php?id=4588

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson