Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Базы данных (http://www.flasher.ru/forum/forumdisplay.php?f=22)
-   -   Сортировка одним запросом (http://www.flasher.ru/forum/showthread.php?t=24676)

evgenz 17.12.2001 18:36

Сортировка одним запросом
 
Есть таблица с фирмами два поля (ID Name)
1 Nissan
2 Ford
3 Жигули
...
Есть таблица с типами (ID Name)
1 Седан
2 Кабриолет
...
Есть таблица цен (ID Id_firm Id_type Price)
1 1 2 $4000
2 5 1 $30000

Надо вывести этот прайс сортируя сначала по фирмам потом по типу потом по цене
да плюс еще разбить на станицы

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

Можно одним сделать


все на mySQL

Geoserg 18.12.2001 16:16

Вывод с сортировкой:

SELECT F.Name, T.Name, P.Price
FROM FIRMATABLE F, TYPESTABLE T, PRICETABLE P
ORDER BY F.Name, T.Name, P.Price

Один совет - в качестве цены храни числовое значение, добавь поле код валюты, ну и табличку с кодами валюты. Можно было бы привести их к у.е., чтобы можно было легко пересчитать в любую другую валюту.

А разбивать на странички нужно скриптом. А в запросе использовать опции Limit, Offset. Лень писать полностью, так что почитай доки по мускулу, там все просто. ;)

Удачи. Geoserg

evgenz 18.12.2001 16:29

Не совсем то...
 
Таким запросом я выведу все имена...
а как что бы по ID выводилось нужное имя

evgenz 18.12.2001 16:34

Не совсем то...
 
Таким запросом я выведу все имена...
а как что бы по ID выводилось нужное имя

Geoserg 19.12.2001 15:17

Тьфу блин... :) Точно забыл еще условия связи таблиц добавить. Вот тормознул-то. Таким запросом вообще выведется не то, что надо.

SELECT F.FirmaName, T.FirmaName, P.Price
FROM FIRMATABLE F, TYPESTABLE T, PRICETABLE P
WHERE (P.ID_FIRM=F.ID)
AND (P.ID_TYPE=P.ID)
ORDER BY F.Name, T.Name, P.Price

Так выведется весь список, который нужен. То же самое можно прописать JOIN'ами:

SELECT FirmaName, TypeName, Price
FROM PriceTable LEFT JOIN FirmaTable ON PriceTable.Firma_ID=FirmaTable.ID LEFT JOIN PriceTable.Type_ID=TypesTable.ID
ORDER BY FirmaName, TypeName, Price

Хотя насчет этого я не уверен. :) Я JOIN'ы не использую, проще прописать все условия в секции WHERE, ИМХО конечно.

Но если интересно почитай MySQL manual главы 6.4.x. Там все есть.

--------------------------------------
а как что бы по ID выводилось нужное имя
--------------------------------------

Какое имя? И по какому ID? ;) У тебя их тут 2 - имя фирмы, имя марки.

Удачи.
Geoserg
P.S. И эта... Почитай мануал-то. Лучше день потерять, потом за 10 минут долететь. :D

Geoserg 19.12.2001 15:21

Ну а чтобы еще на странички ровные порезать добавь словечко LIMIT. Вот так.

SELECT F.FirmaName, T.FirmaName, P.Price
FROM FIRMATABLE F, TYPESTABLE T, PRICETABLE P LIMIT x,y
WHERE (P.ID_FIRM=F.ID)
AND (P.ID_TYPE=P.ID)
ORDER BY F.Name, T.Name, P.Price

Выведет тебе записи с (x+1) по (x+y) включительно. А x,y скриптом формируй.

Успехов.
Geoserg


Часовой пояс GMT +4, время: 07:42.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.