Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывести по две новости из каждого раздела
 
 автор: web777   (18.09.2008 в 19:23)   письмо автору
 
 

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

таблица news в БД у меня такая

+---+------+----+
|id | name |cat |
+---+------+----+
| 1 |title1| 1 |
| 2 |title2| 5 |
| 3 |title3| 3 |
| 4 |title4| 8 |
| 5 |title5| 12 |
+---+-----+-----+

  Ответить  
 
 автор: web777   (19.09.2008 в 21:22)   письмо автору
 
   для: web777   (18.09.2008 в 19:23)
 

пожалуйста, ктонибудь сможет посоветовать по данному вопросу, как реализовать ?

  Ответить  
 
 автор: psychomc   (22.09.2008 в 13:43)   письмо автору
 
   для: web777   (19.09.2008 в 21:22)
 

SELECT название_поля_новостей FROM название таблицы ORDER BY id_новости DESC LIMIT 0,2

попробуй так...первое что пришло в голову....

  Ответить  
 
 автор: Trianon   (22.09.2008 в 14:09)   письмо автору
 
   для: psychomc   (22.09.2008 в 13:43)
 

Вот попробуйте, убедитесь, что это задачу не решает,
и первое, что пришло в голову, придерживайте при себе.

to web777:
одним запросом это не сделать.
Можно попробовать двумя-тремя (WHERE NOT id IN($list1))
Но сложность запросов будет аховая.

  Ответить  
 
 автор: psychomc   (22.09.2008 в 15:32)   письмо автору
 
   для: Trianon   (22.09.2008 в 14:09)
 

Вот попробуйте, убедитесь, что это задачу не решает,
и первое, что пришло в голову, придерживайте при себе.

to web777:
одним запросом это не сделать.
Можно попробовать двумя-тремя (WHERE NOT id IN($list1))
Но сложность запросов будет аховая.>Вот попробуйте, убедитесь, что это задачу не решает,
>и первое, что пришло в голову, придерживайте при себе.
>
>to web777:
>одним запросом это не сделать.
>Можно попробовать двумя-тремя (WHERE NOT id IN($list1))
>Но сложность запросов будет аховая.

ну во-первых это форум,поэтому можно оставлять любое мнение,у уже прислушиваться к нему или нет дело только автора, а во-вторых в названии темы не было написано ничего вроде "осталяйте только проверенные рабочие решения иначе идите нах"
тем более вопрос был не очень понятно сформулирован

  Ответить  
 
 автор: psychomc   (22.09.2008 в 15:34)   письмо автору
 
   для: psychomc   (22.09.2008 в 15:32)
 

пардон...вопрос нормально сформулирован,когда читал спешил и не посмотрел структуру таблицы

  Ответить  
 
 автор: mtxd   (22.09.2008 в 16:44)   письмо автору
 
   для: web777   (18.09.2008 в 19:23)
 

Получи из базы уникальный список всех категорий, и потом прогони через foreach() SELECT ... LIMIT 2;

  Ответить  
 
 автор: Trianon   (22.09.2008 в 17:04)   письмо автору
 
   для: mtxd   (22.09.2008 в 16:44)
 

да прочтите же вы наконец вопрос!

>>>...возможно ли это одним запросом...

  Ответить  
 
 автор: xx77   (22.09.2008 в 18:44)   письмо автору
 
   для: mtxd   (22.09.2008 в 16:44)
 

подскажите как удалить функцию созданную при помощи CREATE FUNCTION
пробовал извлекать одним запросом , медленно работает

а функция осталась :)
<?
CREATE TABLE 
IF NOT EXISTS examplm (
  
id int(11NOT NULL auto_increment,
  
name VARCHAR(255NOT NULL,
  
cat int(11NOT NULL,
  
PRIMARY KEY (id)
ENGINE=MyISAM DEFAULT CHARSET=utf8;    
 
INSERT INTO examplm (namecat)
 
VALUES(
'title1'1),('title6'1),
(
'title2'5),('title7'5),
(
'title3'3),('title8'5),
(
'title4'8),('title9'8),
(
'title5'12),('title10'8);

#/*
DELIMITER $$
CREATE FUNCTION last2_in_cat(id_cat INTRETURNS INT
READS SQL DATA
BEGIN
    
DECLARE i_out     INT;

    
SELECT id INTO i_out
     FROM examplm
     WHERE cat 
id_cat
 ORDER BY id DESC
     LIMIT 1
1;

RETURN 
i_out;

END $$
DELIMITER ;
#*/

# одгим запросом по две последних записи

SELECT FROM examplm
WHERE id 
>= last2_in_cat(cat)
ORDER BY cat id DESC;

#DROP TABLE examplm;
# не работает DROP FUNCTION last2_in_cat;)

  Ответить  
 
 автор: ronin   (22.09.2008 в 19:42)   письмо автору
 
   для: xx77   (22.09.2008 в 18:44)
 


res = mysql_query("SELECT * FROM news  group by сat  " );
  while($p = mysql_fetch_array($res) )
     {

$result = mysql_query("SELECT  * FROM  news WHERE cat='$p[cat]' ORDER BY id DESC LIMIT 2" );
    while($s = mysql_fetch_array($result) )
     {
   echo $s[name]."<br>";
       }
    }

это ответ на первый вопрос
$это можно сделать конечно и одним запросом с кучей подзапросами.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования