Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Нужна помощь в составлении запроса (http://forum.oszone.net/showthread.php?t=135517)

KandaSoft 23-03-2009 01:20 1071462

Нужна помощь в составлении запроса
 
Здравствуйте уважаемые форумчане.

Как реализовать следующее: в бд у меня есть н-ое количество новостей, новости постоянно добавляются. У меня есть 2 блока, которые выводят эти новости.
Например: {block1} выводит 1 новость, последнюю в базе, а {block2} выводит остальные новости, например 5, но так как запрос и структура одинаковые, получается следующее:

++ Новость 1, уникально оформленная

= новость 1 (которую нужно убрать)
= новость 2
= новость 3
= новость 4
и т.д.

Теперь вопрос: как сделать, чтобы второй блок выводил новости, но не с первой, а, например, со второй или третей???
т.е. какой запрос нужно составить и в эту ли ветку я написал?

Заранее очень благодарю за помощь.
_________________

Delirium 23-03-2009 01:48 1071482

Код:

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 1072601

Цитата:

Цитата Delirium
Код:
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 1072753

Цитата:

Цитата KandaSoft
Спасибо большое. Подскажите еще, как сделать, чтобы выводил не со второй записи, а с третей. Не могу понять по какому принципу сформировать запрос »

Код:

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 1074928

Код:

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 1074937

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 1074945

Первый запрос:
Код:

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 1074955

Так, ясно, 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. Потестируйте.

Взято отсюда и отсюда

KandaSoft 26-03-2009 02:54 1074959

Построил запрос следующим образом:
Код:

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 1074961

Во как, даже проще все оказалось, чем думали сначала :) Пометьте тему решенной :)


Время: 05:31.

Время: 05:31.
© OSzone.net 2001-