关于php:SQL Select查询联接多个表

SQL Select query join multiple tables

我有此代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
}

我需要在两个select语句中添加另一个表,并在$dcid上联接,该表称为slas,列为currency。我已经尝试了一些方法,但是没有运气。

我正在尝试使用以下switch语句将货币提取到javascript文件中以获取价格:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var currency ="";

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


            }

甚至当货币等于2或3时,它仍然会显示为默认值...我不确定是switch语句出错还是sql查询。

更新

只有这一行有问题:

1
$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";

摘自以下答案。


我认为这里的问题是WHERE中不合格的datacentre_id不允许您使用名为datacentre_id

的列连接到另一个表

我建议在哪里

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

,查询为

1
2
3
4
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的表的别名为p