SELECT на 3 таблици с релации между тях

stoqnski

Registered
Здравейте , четох няколко урока и теми свързани с проблема ми , но не можах да се справя . Реших да ви попитам директно .
в БД-то имам 3 таблици:

car
--id
--ime
--grad
--kategoria
--status (default - 0 ,но php приложението ми когато обработи адднатия запис прави status - 1 (един вид само одобрените записи се показват в сайта ) т.е. в заявката ми трябва WHERE status = '1';)

kategorii
--cid
--cime

gradove
--gid
--ggrad

При аддването на запис всеки "car" получава стойности за kategoria ( от категории 'cid' ) и за gradove ( от градове 'gid' )
Това при нормален селект :

SELECT * FROM cars WHERE status = '0' ORDER BY id DESC"

изкарва:
Кола Категория Град
$data[ime] $data[kategoria] $data[grad]
Опел 2 3

т.е. cid - 2 и gid - 3
Проблема идва от това , че искам да взима и WHERE cid = FROM kategorii $cime , и още един WHERE gid = FROM gradove $ggrad

т.е. id-тата да са в релация с имената от другите 2 таблици

четох за JOIN , UNION , но неможах да се оправя между 2 таблици , камо ли с 3 в моя случай :D
Ето една тъпа визуализация на това , което искам :
5310.png

Ако не може в $data някакси друго ядче ...

Не ме съдете за това , че пиша някакви тъпи заявки с несъществуващ синтаксис - просто искам да ви насоча .
 
Не мога да разбера. Единия път пишеш:

stoqnski каза:
--status (default - 0 ,но php приложението ми когато обработи адднатия запис прави status - 1 (един вид само одобрените записи се показват в сайта ) т.е. в заявката ми трябва WHERE status = '1';

а после пишеш:

stoqnski каза:
Това при нормален селект :

SELECT * FROM cars WHERE status = '0' ORDER BY id DESC"

Това е заявката, която ще ти свърши работа. Връща 3 полета - car_name, town_name и category_name.

Код:
SELECT car.name AS car_name, gradove.ggrad AS town_name, kategorii.cime AS category_name FROM car RIGHT JOIN gradove ON car.grad = gradove.gid RIGHT JOIN kategorii ON kategorii.cid = car.kategoriq WHERE car.status = '1' ORDER BY car.id DESC

ПП:
Картинката ти е грешна, понеже след като направиш loop за обявите, не правиш втори и трети такъв съответно за категорията и името на града, понеже те връщат само 1 ред, не няколко и няма причина да са в цикъл.
 
Nikol4u каза:
Не мога да разбера. Единия път пишеш:

stoqnski каза:
--status (default - 0 ,но php приложението ми когато обработи адднатия запис прави status - 1 (един вид само одобрените записи се показват в сайта ) т.е. в заявката ми трябва WHERE status = '1';

а после пишеш:

stoqnski каза:
Това при нормален селект :

SELECT * FROM cars WHERE status = '0' ORDER BY id DESC"

Това е заявката, която ще ти свърши работа. Връща 3 полета - car_name, town_name и category_name.

Код:
SELECT car.name AS car_name, gradove.ggrad AS town_name, kategorii.cime AS category_name FROM car RIGHT JOIN gradove ON car.grad = gradove.gid RIGHT JOIN kategorii ON kategorii.cid = car.kategoriq WHERE car.status = '1' ORDER BY car.id DESC

ПП:
Картинката ти е грешна, понеже след като направиш loop за обявите, не правиш втори и трети такъв съответно за категорията и името на града, понеже те връщат само 1 ред, не няколко и няма причина да са в цикъл.

знам , че е грешна просто исках да ви насоча

WHERE status = '1' трябва да е

но май трябва да спомена , че в таблицата "cars" имам 13полета , които трябва да ги изкарам с този select ...

Просто от `cars` полетата (kategoria & grad) при (нормален select за съответно cid & gid from kategorii & gradove ) да придобият съответната категория и град ( cime & ggrad from kategorii & gradove )

по - добре едва ли ще мога да го опиша
 
[sql]SELECT car.*, gradove.ggrad AS town_name, kategorii.cime AS category_name FROM car RIGHT JOIN gradove ON car.grad = gradove.gid RIGHT JOIN kategorii ON kategorii.cid = car.kategoriq WHERE car.status = '1' ORDER BY car.id DESC [/sql]

Така покрива ли изискванията?
 
Nikol4u каза:
[sql]SELECT car.*, gradove.ggrad AS town_name, kategorii.cime AS category_name FROM car RIGHT JOIN gradove ON car.grad = gradove.gid RIGHT JOIN kategorii ON kategorii.cid = car.kategoriq WHERE car.status = '1' ORDER BY car.id DESC [/sql]

Така покрива ли изискванията?

ммеко казано "ПЕРФЕКТНО " : )) радвам се , че най-после имам база на която да градя ... :D толкова ме мъчиха тези дълги заявки с повечко таблици ..

Благодаря .
 

Back
Горе