[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вытащить из бд информацию о пользователях и их пос
Гость_Олег
Здравствуйте, задача - вытащить из БД информацию о пользователях и их последних записях, что имею -


SELECT *
FROM `users`
LEFT JOIN `news` ON (`users`.`user_name` = `news`.`user_name`)
ORDER BY `user_points` DESC
HAVING
(`news`.`news_date` = MAX(`news`.`news_date`))


Получаю ошибку синтаксиса, в чем может быть проблема? Заранее огромное спасибо!
Valick
HAVING до ORDER BY
но скорее всего ORDER BY перепутали с GROUP BY
и user_points укажите к какой таблице относится

_____________
Стимулятор ~yoomoney - 41001303250491
Гость_Олег
Ошибка исчезла, но запрос ничего не выдает... (0 результатов)
Скажите, как правильно построить такой запрос?
Для уточнения
users
user_name user_points

news
news_name news_date user_name

Нужно получить информацию о всех пользователях и их последних записях (то есть с максимальным news_date)... потом отсортировать по users.user_points
Заранее благодарю!
Valick
SELECT n.news_name, n.news_date, u.user_name, u.user_points
FROM user u
RIGHT JOIN (SELECT news_name, news_date, user_name
FROM news
WHERE (news_date, user_name)
IN (SELECT MAX(news_date) news_date, user_name
FROM news GROUP BY user_name) ) n
ON u.user_name = n.user_name
ORDER BY u.user_points

но вообще немного неправильно организованы таблицы БД

_____________
Стимулятор ~yoomoney - 41001303250491
Гость_Олег
Огромное спасибо, завтра попробую, но хотелось бы понять как это работает... Почему используется RIGHT JOIN, а не LEFT JOIN? И почему нужна именно такая сложная запись, нельзя ли использовать нечто вроде
SELECT n.news_name, n.news_date, u.user_name, u.user_points
FROM user u
LEFT JOIN (SELECT news_name, MAX(news_date) AS news_date, user_name
FROM news
GROUP BY user_name ) n
ON u.user_name = n.user_name
ORDER BY u.user_points

Раз я писал - работать конечно же не будет, но почему?)
Еще раз огромное спасибо!
Valick
можт и будет (только там RIGHT JOIN или если вам больше LEFT JOIN по душе, то поменяйте таблицы местами) , у вас есть таблицы, а у меня их влом писать smile.gif да и на работе спал возле компа, и в полудреме ответы калякал.
хотя ваш не будет работать, т.к. у вас не будет соотвествия news_name и MAX(news_date) это у GROUP BY фишка такая
MAX(news_date) вы получите нужный, а вот news_name результат не предсказуем
ну а RIGHT JOIN, а не LEFT JOIN, потому что основной выступает таблица та что справа

_____________
Стимулятор ~yoomoney - 41001303250491
Guest
Да, действительно, мой выдает какой-то бред) Ваш работает, огромное огромное Вам спасибо!
Только все же, почему не работает мой? Все портит GROUP BY?
И еще, вы писали что бд организована неправильно, что бы вы посоветовали изменить? Сталкиваюсь со сложными мускул запросами впервые, а проект довольно нагруженный
Valick
users
user_id(AI) | user_name | user_points

news
news_id(AI) | news_name | news_date | user_id

AI - это авто инкремент

связь таблиц должна быть по user_id

_____________
Стимулятор ~yoomoney - 41001303250491
olegod
Да да, это само собой, решил не использовать id так как все эти данные загружает сторонне приложение уже в таком виде...
Хочу попросить совета - как правильно, делать бд максимально динамической (т.е. вычислять, например, количество записей count'ом каждый раз) или сохранять в ней как можно больше данных (хранить то же количество в бд статически)
olegod
Например, количество друзей в крупных соц. сетях как хранится?))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.