2013-07-29 2 views
0

У меня есть этот код:SQL Select запрос объединить несколько таблиц

function getPricing() { 
$returnarr = array(); 
$dcid = (isset($_REQUEST['dcid'])) ? "WHERE datacentre_id='" . mysql_real_escape_string($_REQUEST['dcid']) . "'" : ''; 

$addons = $_REQUEST['addon']; 

if ($addons == "true") 
    $sql = "SELECT * FROM addonprices $dcid ORDER BY addon_desc ASC"; 
else 
    $sql = "SELECT l.l_name, p.* FROM pricing p LEFT JOIN locations l ON l.location_id=p.datacentre_id $dcid ORDER BY CASE splitsize WHEN 'f' THEN 0 WHEN 'w' THEN 1 WHEN 'h' THEN 2 WHEN 'q' THEN 3 WHEN '2U' THEN 4 WHEN '1U' THEN 5 ELSE 6 END DESC, amps ASC"; 

$result = mysql_query($sql); 
while ($row = mysql_fetch_assoc($result)) { 
    $returnarr[] = $row; 
} 
header('Content-type: application/json'); 
echo json_encode($returnarr); 
} 

мне нужно добавить еще одну таблицу в обоих выбранных утверждений, вступив на $dcid, таблица называется slas и Колонку currency Я попробовал несколько вещей, но не повезло.

Я пытаюсь вытащить валюту в яваскрипта файл, чтобы получить цены с помощью этого переключателя заявление:

var currency = ""; 

      switch (row.currency) { 
       case '1' : 
        currency = "£"; 
        break; 
       case '2' : 
        currency = " $"; 
        break; 
       case '3' : 
        currency = "€"; 
        break; 
       default: 
        currency = "£"; 
        break; 


      } 

и даже тогда, когда валюта должна быть равна 2 или 3 все еще отображается по умолчанию ... Я не уверен, что это неправильный оператор switch или sql-запрос.

UPDATE

Просто, имеющие проблемы с этим одной строкой:

$sql = "SELECT l.l_name, p.*, slas.currency FROM pricing p LEFT JOIN locations l ON l.location_id=p.datacentre_id LEFT JOIN slas ON slas.datacentre_id = p.datacentre_id $dcid ORDER BY CASE splitsize WHEN 'f' THEN 0 WHEN 'w' THEN 1 WHEN 'h' THEN 2 WHEN 'q' THEN 3 WHEN '2U' THEN 4 WHEN '1U' THEN 5 ELSE 6 END DESC, amps ASC"; 

Взятые из ответа ниже.

+0

Что вы пытались, чтобы мы могли показать вам, где вы ошибались – Anigel

+0

обновил мой вопрос –

ответ

0

Я думаю, что проблема здесь в том, что неквалифицированные datacentre_id в вашем WHERE не позволит вам присоединиться к другому столу с колонкой именем datacentre_id

Я бы предложил ГДЕ быть

$dcid = (isset($_REQUEST['dcid'])) ? "WHERE p.datacentre_id='" . mysql_real_escape_string($_REQUEST['dcid']) . "'" : ''; 

и запрос будет

if ($addons == "true") 
    $sql = "SELECT p.*, slas.currency FROM addonprices p LEFT JOIN slas ON slas.datacentre_id = p.datacentre_id $dcid ORDER BY addon_desc ASC"; 
else 
    $sql = "SELECT l.l_name, p.*, slas.currency FROM pricing p LEFT JOIN locations l ON l.location_id=p.datacentre_id LEFT JOIN slas ON slas.datacentre_id = p.datacentre_id $dcid ORDER BY CASE splitsize WHEN 'f' THEN 0 WHEN 'w' THEN 1 WHEN 'h' THEN 2 WHEN 'q' THEN 3 WHEN '2U' THEN 4 WHEN '1U' THEN 5 ELSE 6 END DESC, amps ASC"; 

уведомление в обоих случаях таблица с datacentre_id в нем псевдонимами р

+0

Спасибо, я добавил это, и теперь он показывает некоторые записи, которых раньше не было. Но, пожалуйста, см. Обновление моего вопроса в отношении поля валюты –

+0

Я пропустил добавление поля slas.currency ко второму запросу, отредактированному для исправления. Вы также можете сделать дело внутри sql. CASE slas.currency WHEN 1 THEN '£' WHEN 2 THEN '$' WHEN 3 THEN '€' ELSE '£' END AS currency – Caleth

+0

, похоже, работает для первого запроса, но не для второго. Теперь второй не показывает никаких записей вообще. –