Показать полную графическую версию : [решено] Нужна помощь в составлении запроса
KandaSoft
23-03-2009, 01:20
Здравствуйте уважаемые форумчане.
Как реализовать следующее: в бд у меня есть н-ое количество новостей, новости постоянно добавляются. У меня есть 2 блока, которые выводят эти новости.
Например: {block1} выводит 1 новость, последнюю в базе, а {block2} выводит остальные новости, например 5, но так как запрос и структура одинаковые, получается следующее:
++ Новость 1, уникально оформленная
= новость 1 (которую нужно убрать)
= новость 2
= новость 3
= новость 4
и т.д.
Теперь вопрос: как сделать, чтобы второй блок выводил новости, но не с первой, а, например, со второй или третей???
т.е. какой запрос нужно составить и в эту ли ветку я написал?
Заранее очень благодарю за помощь.
_________________
Delirium
23-03-2009, 01:48
select top 5 id_news, news_text from news
where id_news <>(select max(id_news) from news)
order by id_news desc
если, к примеру в базе 17 записей, то запрос вернет 16,15,14,13,12 записи.
KandaSoft
23-03-2009, 22:28
Код:
select top 5 id_news, news_text from news
where id_news <>(select max(id_news) from news)
order by id_news desc
если, к примеру в базе 17 записей, то запрос вернет 16,15,14,13,12 записи. »
Спасибо большое. Подскажите еще, как сделать, чтобы выводил не со второй записи, а с третей. Не могу понять по какому принципу сформировать запрос.
И еще раз благодарю за помощь.
Delirium
24-03-2009, 01:17
Спасибо большое. Подскажите еще, как сделать, чтобы выводил не со второй записи, а с третей. Не могу понять по какому принципу сформировать запрос »
select top 5 id_news, news_text from news
where id_news not in (select top 2 id_news from news order by id_news desc)
order by id_news desc
В случае с моими 17 записями запрос вернул записи 11,12,13,14,15.
Кстати и предыдущий запрос можно переписать в таком же виде. Достаточно менять top 2 На нужное число, и он будет отбрасывать TOP N записей с конца таблицы.
KandaSoft
26-03-2009, 01:37
The Error returned was: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '5 id, title, date, alt_name, short_story, category, flag FROM news_post WHERE id ' at line 1
Error Number: 1064
SELECT top 5 id, title, date, alt_name, short_story, category, flag
FROM news_post
WHERE id NOT IN (select top 2 id from news_post order by id desc)
AND approve='1' ORDER BY date
Вот, выдал ошибку...
Delirium
26-03-2009, 01:52
KandaSoft, тогда проверяйте по порядку команды:
select top 5 id, title, date, alt_name, short_story, category, flag FROM dle_post
SELECT top 5 id, title, date, alt_name, short_story, category, flag
FROM news_post
select top 2 id from news_post order by id desc
SELECT top 5 id, title, date, alt_name, short_story, category, flag
FROM news_post
WHERE id <> 1 AND approve='1'
ORDER BY date
Если на чем либо выдаст ошибку, сообщите
KandaSoft
26-03-2009, 02:10
Первый запрос:
The Error returned was:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5 id, title, date, alt_name, short_story, category, flag FROM news_post' at line 1
Error Number:
1064
Второй:
The Error returned was:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5 id, title, date, alt_name, short_story, category, flag FROM news_post' at line 1
Error Number:
1064
Третий:
The Error returned was:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2 id from dle_post order by id desc' at line 1
Error Number:
1064
И последний:
The Error returned was:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '5 id, title, date, alt_name, short_story, category, flag FROM dle_post WHERE i' at line 1
Error Number:
1064
Как я понимаю, он не хочет воспринимать значение TOP.
Delirium
26-03-2009, 02:41
Так, ясно, MySQL не знает что такое TOP, а я проверял на MS SQL.
Он знает такую структуру
SELECT * FROM tbl LIMIT 0,10
т.е вместо select top лалала надо написать
select id_news, news_text from news LIMIT 0,10
where id_news not in (select top 2 id_news from news order by id_news desc)
order by id_news descили в другое место подставить LIMIT. Потестируйте.
Взято отсюда (http://forums.sqlwire.com/showthread.php?t=32853) и отсюда (http://www.google.ru/search?hl=ru&newwindow=1&q=mysql+select+TOP&lr=&aq=f&oq=)
KandaSoft
26-03-2009, 02:54
Построил запрос следующим образом:
SELECT id, title, date, alt_name, short_story, category, flag FROM news_post WHERE id NOT IN (select id, date from news_post order by date desc limit 0, 2 ) AND approve='1' ORDER BY date desc limit 0,5
Но он выдал ошибку: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
Версия MySQL: 5.0.45
limit не сочетается с in...
Тестирую на денвере.
=====================================
Все, разобрался. Спасибо за помощь и ссылки!
Нужно было просто в исходный запрос:
SELECT id, title, date, alt_name, short_story, category, flag
FROM news_post
WHERE approve='1'
ORDER BY date
Добавить в конец DESC LIMIT 0, 2
Где вместо 0 вставить с какой записи начинать выводить.
Delirium
26-03-2009, 03:06
Во как, даже проще все оказалось, чем думали сначала :) Пометьте тему решенной :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.