2014-09-21 4 views
0

У меня есть этот столовНаписание Mysql Левое соединение не работает?

СТАТЬИ

articles_id

article_name
article_qty
article_price
article_amount

Приказы

orders_id
article_id
invoice_id
CUSTOMER_ID

ПОЛЬЗОВАТЕЛЕЙ

customers_id
CUSTOMER_NAME
customer_position
customer_office

customer_invoice

Когда я сделать что-то вроде этого

$sql="SELECT customer_name, article_name FROM orders LEFT JOIN articles ON article_id = articles_id LEFT JOIN customers on customer_id = customers_id"; 

Это doees не получить никаких результатов, что правильный путь налево присоединиться к этой две таблицы в одном запросе?

Я использую CI Как это

$this->db->query($sql); 

Что я получил I Это

object(CI_DB_mysql_result)#28 (8) { ["conn_id"]=> resource(31) of type (mysql link persistent) ["result_id"]=> resource(52) of type (mysql result) ["result_array"]=> array(0) { } ["result_object"]=> array(0) { } ["custom_result_object"]=> array(0) { } ["current_row"]=> int(0) ["num_rows"]=> int(2) ["row_data"]=> NULL } 
+0

Ваш запрос должен быть правильным, хотя я бы использовал псевдонимы таблиц для определения всех имен столбцов. –

+0

Left join не отфильтровывает результаты из первой таблицы, и у вас нет предложения WHERE. У вас есть строки в таблице 'orders'? – Brandon

+0

Да, у меня есть строки в заказах –

ответ

1

Вы должны указать псевдоним для любой таблицы присоединиться, которые вы используете, как это:

$sql="SELECT c.customer_name, a.article_name FROM orders o 
LEFT JOIN articles a ON o.article_id = a.articles_id 
LEFT JOIN customers c on o.customer_id = c.customers_id"; 

или вы можете использовать синтаксис USING следующим образом:

$sql="SELECT c.customer_name, a.article_name FROM orders o 
LEFT JOIN articles a ON USING(articles_id) 
LEFT JOIN customers c on USING(customer_id); 
+0

Я согласен, что это лучшая форма, но я не уверен, что это причина проблемы. Неправильные критерии внешнего соединения могут привести к тому, что соединение либо вернет «NULL» для столбцов справа, либо приведет к большему количеству строк, чем это необходимо (например, если «articles_id = articles_id» интерпретируется как одна и та же таблица, тогда он всегда будет равен самому). – Brandon