Задавайте вопросы, мы ответим
Вы не зашли.
Пишу модуль для блога и вот спотыкнулся над запросом
Есть 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
Помогите плиз выкрутится.
Неактивен
Если я правильно понял, то действует еще ограничение, что у статьи всегда
один автор, а вывести надо не последнюю статью, а вывести для каждого
автора, писавшего в категории, его последнюю статью.
Если так — то хорошо этот вопрос решить нельзя. Можно решить плохо
Например:
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 пользователей, а не имена, если у Вас не могут
писать анонимные пользователи.
Неактивен
Спасибо. Помогли здорово. Не найду куда поставить +
На счет имен чуть не понял. Мне нужен вывод на странице списка ников и полных имен авторов, одними id не обойтись. Анонимные у меня не могут писать.
Неактивен
u.name = p.author
Вот эта связь меня смущает. Куда лучше в post хранить id автора,
а не его имя.
Неактивен
paulus написал:
u.name = p.author
Вот эта связь меня смущает. Куда лучше в post хранить id автора,
а не его имя.
Это уж не ко мне. Это к автору движка DLE. Еще раз спасибо за помощь.
Неактивен
Уважаемый 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).
Я так понимаю надо изменить лишь подзапрос. Увеличить подмножество. Спасибо.
Неактивен
как ораничить выборку внутри групп?
В каждой группе не больше 10 строк
Отредактированно Aqula (20.07.2011 13:24:23)
Неактивен
Нет пока идей?
Неактивен
может как нибудь можно при помощи предикатов top 10 и подобных?
Неактивен
Предикатов типа top 10 в MySQL нет.
Как выбрать 10 последних статей каждого автора см http://sqlinfo.ru/forum/viewtopic.php?id=4588
Неактивен