Войти

Показать полную графическую версию : [решено] Нужна помощь в составлении запроса


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