Консультация № 183545
07.06.2011, 23:21
57.44 руб.
0 3 2
Здравствуйте! У меня возникли сложности с таким вопросом:
Необходимо составить запрос по двум таблицам "категории" и "фото" ,что бы в итоговой таблице зыписи сортировались по категории и в каждой категории по порядку вывода (колонка order) например : фото из таблицы "фото" с id_foto 145,198,152 относятся к 12-й категории необходимо ,что бы id_foto 12-й категории вывелись в следующем порядке -согласно значениям в колонке order – 198, 145, 152 В запросе необходимо использовать конструкцию SQL_CALC_FOUND_ROWS . Используется MySQL сервер Apache.
Спасибо.

Категории

id category
1 1
2 3
3 5
4 8
5 3
6 3
7 5
8 12
9 3


Фото

id_foto category order
135 1 0
111 1 1
114 8 1
101 5 2
145 12 2
198 12 0
152 12 3
187 5 4
114 3 4


Итоговая таблица -которая должна получится в результате запроса

id_foto category order
135 1 0
111 1 1
114 3 4
101 5 2
187 5 4
114 8 1
198 12 0
145 12 2
152 12 3




Обсуждение

Неизвестный
07.06.2011, 23:45
общий
В вопросе исчезли пробелы в таблицах -на всякий случай ,в прикреплённом файле 1.zip , табл. с не нарушенным форматированием .
Прикрепленные файлы:
2ef2c90cfd3b3c59d5b83b97d13578f5.zip
давно
Старший Модератор
312929
1973
08.06.2011, 04:11
общий
это ответ
Здравствуйте, Dima1967!

Запрос будет иметь следующий вид

[code lang=sql]SELECT SQL_CALC_FOUND_ROWS id_foto, category, `order` FROM "фото" ORDER BY category, `order`[/code]

Здесь "фото" - имя таблицы фотографий, имя поля `order` взято в обратные кавычки, чтобы не было совпадения с ключевым словом ORDER.

Есть, правда, некоторые неясности (или я не совсем понял вопрос):

1. Для чего в запросе необходимо использовать конструкцию SQL_CALC_FOUND_ROWS, если не предполагается ограничение LIMIT и последующий запрос SELECT FOUND_ROWS()? Или Вы про них не упомянули?

2. Для чего нужна таблица Категории, если таблица Фото никак с ней не связана?
5
1."...Для чего в запросе необходимо использовать конструкцию SQL_CALC_FOUND_ROWS..." - я про это не упомянул-но это всё используется для счётчика страниц.<br>2. Она не нужна - просто мне не надо было ночью отправлять вопрос ,а утром, перечитать его на свежую голову и отправить))) - ещё раз большое спасибо,у меня вызвала сложность группировка - не знал,что в order by - можно перечислить всё через запятую.
Неизвестный
09.06.2011, 01:43
общий
09.06.2011, 09:34
это ответ
Доброе время суток, Dima1967!

Я так понимаю у вас есть три таблицы `category`, `photo` и `new_photo`. Таблицы выглядят примерно так:

`category` имеет `id` и`category`
`photo` имеет ``id_foto`, `category` и `order`
`new_photo` имеет ``id_foto`, `category` и `order` и пока пустая.

Вам необходимо отсортировать две таблицы указанным образом и сохранить в `new_photo`. Для этого необходимо воспользоваться следующим запросом:

[code lang=sql]
INSERT INTO `new_photo`
SELECT SQL_CALC_FOUND_ROWS DISTINCT
photo.id_foto, photo.category, photo.order
FROM
photo INNER JOIN category ON category.category = photo.category
ORDER BY
photo.category ASC, photo.order ASC
[/code]

Отсортированные данные будут занесены в пустую таблицу.

DISTINCT в данном случае очень важен, в ином случае мы получим повторяющиеся строки.

Удачи!
Форма ответа