[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Двойная сортировка
adm119
Есть в БД две таблицы: category и items. Таблица с категориями содержит ячейки id и name. Таблица с позициями содержит ячейки id, name и cotegory, куда указывается id нужной категории. Как мне сделать сортировку вывода позиций по категориям, но не по id категорий, а по алфавиту, по ячейке name? Думал-думал, так и не придумал. Подскажите.



Спустя 40 минут, 16 секунд (8.08.2011 - 15:15) linker написал(а):
... ORDER BY `name` ASC|DESC

Спустя 1 час, 41 минута, 59 секунд (8.08.2011 - 16:57) adm119 написал(а):
linker, не всё так просто smile.gif Если такой запрос посылать, то будет сортировать по алфавиту позиций, а мне надо по алфавиту категорий.

Спустя 14 часов, 44 минуты, 37 секунд (9.08.2011 - 07:42) linker написал(а):
Джойнишь или селектишь таблицу с категориями и
... ORDER BY `category`.`name` ASC|DESC

Спустя 4 часа, 41 минута, 21 секунда (9.08.2011 - 12:23) adm119 написал(а):
linker, я наверное объяснил плохо. Сейчас попробую объяснить лучше.

Есть 2 таблицы:

TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)

TABLE `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`category` int(11) NOT NULL,
PRIMARY KEY (`id`)
)

В таблице category находятся список категорий услуг. (Например: Лечение; Протезирование; Отбеливание и т.д.) А в таблице items хранятся непосредственно услуги (Например: Пломба передних зубок; Пломба коренных зубов; Отбеливание зубов; Протезирование импортными средствами и т.д.). В таблице items много-много всего, и поле category в этой таблице просто содежрить цифру, которая соответствует цифре нужной категории в поле id таблицы category.

Если сделать запрос "... ORDER BY `category`.`name` ASC|DESC", то отсоритуется по цифрам. А мне надо, чтобы данные таблицы items сортировались по категории, но не по цифре, а по названию. Иначе говоря, чтобы данные таблицы items сортировались по полю name таблицы category. Вот smile.gif

Спустя 45 минут, 26 секунд (9.08.2011 - 13:09) linker написал(а):
Да ты хорошо объяснил, а я тебе ответил вроде, но раз ты не понимаешь, придётся развернуть
SELECT 
`items`.*, `category`.`name` AS `catname`
FROM
`items`
LEFT JOIN `category` ON `category`.`id` = `items`.`category`
ORDER BY
`category`.`name` ASC

Спустя 35 минут, 33 секунды (9.08.2011 - 13:44) adm119 написал(а):
Ага, теперь начинаю понимать. А что такое catname? Откуда взялось?

Спустя 7 минут, 51 секунда (9.08.2011 - 13:52) VolDroN написал(а):
Это означает что category.name надо выводить под именем catname.
$row['catname'] покажет содержимое category.name

Спустя 2 часа, 5 минут, 51 секунда (9.08.2011 - 15:58) linker написал(а):
adm119
Понимаешь, у тебя в таблице `items` и `category` одинаковые поля `name`, чтобы избежать при обработке в PHP подмены `items`.`name` на `category`.`name` я для него использовал алиас `catname` и тогда в цикле можно так
while($row = mysql_fetch_assoc($res))
{
echo $row['catname'];
}

Спустя 26 минут, 41 секунда (9.08.2011 - 16:25) adm119 написал(а):
Всё, теперь всё понял. Попробовал, всё работает.
linker, огромное спасибо!
Пойду курить мануал по LEFT JOIN.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.