2014-11-29 2 views
0

Я пытаюсь выполнить этот запрос для печати данных из трех таблиц. Но почему-то запрос не выполняется.Inner Join Query - 3 таблицы

SELECT l.locality_id, c.city_name, l.locality_name, cloud_site_location_outlet_localities.minimum_order, cloud_site_location_outlet_localities.delivery_time, cloud_site_location_outlet_localities.delivery_charge FROM `cloud_site_location_localities` l INNER JOIN `cloud_site_location_cities` c on l.city_id=c.city_id 

ошибка, что я получаю от выполнения выше запроса:

1054 - Unknown column 'cloud_site_location_outlet_localities.minimum_order' in 'field list' 

Однако этот запрос работал хорошо, когда я должен был отображать данные из только двух таблиц.

SELECT l.locality_id, c.city_name, l.locality_name FROM `cloud_site_location_localities` l INNER JOIN `cloud_site_location_cities` c on l.city_id=c.city_id 

Куда я иду не так?

Когда я использую следующий запрос, чтобы экспортировать его в CSV, я получаю избыточные данные. Из 1000 записей я получаю только 400, а затем 400 повторяются.

Это код я реализую

$sql = "SELECT l.locality_id, c.city_name, l.locality_name, o.minimum_order, o.delivery_time, o.delivery_charge FROM `cloud_site_location_localities` l INNER JOIN `cloud_site_location_cities` c ON l.city_id = c.city_id INNER JOIN `cloud_site_location_outlet_localities` o ON l.locality_id = o.locality_id"; 
$result = $DB->query($sql); 


//$output = fopen($filename, 'c+'); 
$output = fopen('php://output', 'c+'); 
fputcsv($output, array('Location Id', 'City Name', 'Location Name','Minimum Order Amount','Delivery Time','Delivery Charge')); 
$row = array(); 
$csv_output = ""; 
$csv_output .= "Locality Id,City Name,Locality Name,Minimum Order Amount,Delivery Time,Delivery Charge\n"; 
foreach($result as $locality_value) 
{ 
    $row['locality_id'] = $locality_value->locality_id; 
    $row['city_name']  =  $locality_value->city_name; 
    $row['locality_name'] = $locality_value->locality_name; 
    $row['minimum_order'] = $locality_value->minimum_order; 
    $row['delivery_time'] = $locality_value->delivery_time; 
    $row['delivery_charge'] = $locality_value->delivery_charge; 
    $csv_output .= trim($row['locality_id']).",".trim($row['city_name']).",".trim($row['locality_name']).",".trim($row['minimum_order']).",".trim($row['delivery_time']).",".trim($row['delivery_charge']).",,\n"; 
    fputcsv($output, $row); 

} 
fclose($output); 
print $csv_output; 
+0

Вы не JOIN, просто добавив имя таблицы в выбранном виде здесь основной учебник HTTP: // блог .codinghorror.com/a-visual-explain-of-sql-joins/ – Mihai

ответ

1

Вы пропускаете пункт join для cloud_site_location_outlet_localities. Например:

SELECT  l.locality_id, 
      c.city_name, 
      l.locality_name, 
      o.minimum_order, 
      o.delivery_time, 
      o.delivery_charge 
FROM  `cloud_site_location_localities` l 
INNER JOIN `cloud_site_location_cities` c 
     ON l.city_id = c.city_id 
INNER JOIN `cloud_site_location_outlet_localities` o 
     ON l.outlet_id = c.outlet_id --just guessing the column names 
+0

Да, это действительно работает, но я получаю избыточные данные. Я сопоставляю locality_id с 'cloud_site_location_outlet_localities' и' cloud_site_location_localities' – nirvair

+0

Я обновил вопрос, не могли бы вы взглянуть – nirvair

0

простая структура для соединения трех таблиц в MySQL

select * 
from 
    tbA a 
     inner join 
    tbB b 
     on a.common = b.common 
     inner join 
    tbC c 
     on b.common = c.common