Как по ID да направя асоциация от друга таблица.

novakabg

Registered
Здравейте, имам нужда от малко помощ за заявка.

Имам две таблици.

Таблица 1:

Order_vip

`id`
`name`
`date`

Таблица 2:

Order

`id`
`name`
`products`
`date`
`adres`
`comment`

Искам на правя следната заявка, да изкарам поръчки от orders спрямо Order_vip.

Ето и моята малка заявка за Order(таблица 2)
Код:
	$sql = $this->db->sql("
	SELECT o.order_id, o.firstname, os.name as status, o.date_added, o.date_modified, o.payment_method,
	       o.shipping_method, o.total, o.payment_address_1, o.payment_address_2, o.telephone 
	FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_status os ON (o.order_status_id = os.order_status_id) 
	WHERE o.user_id = '" . (int)$this->user->getId() . "' 
	AND o.order_status_id > '0' AND o.store_id = '" . (int)$this->config->get('config_store_id') . "'
	AND os.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.order_id DESC LIMIT " . (int)$start . "," . (int)$limit);

Но ми се иска да изкарам поръчките само при асоцияция на Order_vip.
 
Първо кажи каква е връзката между двете таблици, защото първата прилича по-скоро на под-таблица на втората, а това не е добре за БД структурата.

Ето и заявката в по-четлив вид, че както си я написал, едвам се чете :D

[sql]SELECT o.*
FROM `order` o
LEFT JOIN order_status os ON (o.order_status_id = os.order_status_id)
WHERE o.user_id = ?
AND o.order_status_id > '0'
AND o.store_id = ?
AND os.language_id = ?
ORDER BY o.order_id DESC
LIMIT ?, ?
[/sql]

И използвай bound parameters, вместо да вкарваш променливите директно в стринга на заявката.
 
Не стават ясни връзките между таблците, но попринцип:
Можеш да използваш условие от типа
Where order.id in (select id from order_vip)

Или да направиш inner join, или ако правиш left join да добавиш
Where order_vip.id is not null

За да сме ти максимално полезни може да покажеш структурата и заявката в sqlfiddle
 

Горе