Соединение двух таблиц и сортировка при группировке

12
Pavka
На сайте с 20.05.2005
Offline
82
1180

Есть две таблицы: category и article

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

делаю такой запрос:

SELECT * 

FROM category, article
WHERE category.id = article.сid
GROUP BY category.id

При этом выводится первая добавленная статья в категории:confused:

Никак не соображу, как сделать предварительную сортировку не использую подзапросы

Есть ли такое решение?

Без подписи
S
На сайте с 11.01.2008
Offline
32
#1

а если так?


SELECT *
FROM category, article
WHERE category.id = article.сid
GROUP BY article.cid DESC, category.id
блог оптимизатора (http://seoplayer.ru)
Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#2

Формат таблиц нужен.

Pavka
На сайте с 20.05.2005
Offline
82
#3
seoplayer:
а если так?

Нет. article.cid неуникальное значение и группиовка нарушается

да и приемы сортировки в GROUP BY действуют только на сгруппированные данные 😡

Pavka добавил 10.06.2008 в 10:09

Алексей Барыкин:
Формат таблиц нужен.

Вот примерная структура:


CREATE TABLE `category` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(250) NOT NULL,
`descr` varchar(250) NOT NULL,
`dates` varchar(50) NOT NULL,
PRIMARY KEY (`bid`),
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251;

CREATE TABLE `article` (
`id` int(20) NOT NULL auto_increment,
`cid` int(11) NOT NULL,
`dates` varchar(50) NOT NULL,
`counter` int(7) NOT NULL,
`comments` int(7) NOT NULL,
`rating` int(5) NOT NULL,
`rating_date` varchar(50) NOT NULL,
`rating_vote` int(5) NOT NULL,
`title` varchar(250) NOT NULL,
`text` longtext NOT NULL,
PRIMARY KEY (`id`),
KEY `cid` (`cid`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=cp1251;
[Удален]
#4

SELECT *

FROM category, (SELECT * FROM article ORDER BY id DESC) as a

WHERE category.id = a.сid

GROUP BY category.id

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#5

Pavka, а зачем по второй таблице запрос в такой ситуации?

Я бы сделал так:


Select MAX(id), cid
From article
Group By cid
• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
Pavka
На сайте с 20.05.2005
Offline
82
#6
bearman:
SELECT *
FROM category, (SELECT * FROM article ORDER BY id DESC) as a
WHERE category.id = a.сid
GROUP BY category.id

Да, подобный запрос я сейчас и использую.

Но хотелось бы обойтись без подзапросов - уж больно охочи они до памяти :)

Вчера покурил кучу манов по MySql но так и не нашел решения без подзапроса

СКОРПИОН, из таблицы категорий нужно взять название и описание категории.

Т.е. чтобы получилось примерно так:

  • Название категории
  • описание категории
  • последняя статья в категории
Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#7
* Название категории
* описание категории
* последняя статья в категории

Select MAX(a.id), c.name, c.descr

From article a

left join category с ON c.id = a.cid

Group By a.cid

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#8
Pavka:
СКОРПИОН, из таблицы категорий нужно взять название и описание категории.

Ну тогда я добавил бы Join второй таблицы, как это чуть раньше уже сделал Алексей Барыкин.

Pavka
На сайте с 20.05.2005
Offline
82
#9

Алексей Барыкин, СКОРПИОН, результат тотже, что и в моем первом примере :)

В результат обавляется поле MAX(a.id) с максимальным ID статьи в данной категории, но сама статья при этом имеет имнимальный ID, т.е. самая первая 😡

[Удален]
#10

Select MAX(a.id), c.name, c.descr

From article a

inner join category с ON c.id = a.cid

Group By a.cid order by a.id DESC

должно работать :)

без подзапроса ты точно не получишь данные из двух таблиц, ведь чтобы из двух кошельков взять деньги, тебе надо два кашелька открыть :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий