【问题标题】:SQL Select query join multiple tablesSQL Select 查询连接多个表
【发布时间】:2013-07-29 10:08:49
【问题描述】:

我有这个代码:

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 我尝试了几件事,但没有运气。

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

var currency = "";

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


            }

即使货币应该等于 2 或 3,它仍然显示为默认值...我不确定是 switch 语句错误还是 sql 查询。

更新

只是这一行有问题:

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

摘自以下答案。

【问题讨论】:

  • 你尝试了什么,我们可以告诉你哪里出了问题

标签: php sql select left-join


【解决方案1】:

我认为这里的问题是WHERE 中不合格的datacentre_id 将不允许您加入另一个具有名为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 的表都是别名 p

【讨论】:

  • 谢谢,我已经添加了这个,现在它显示了一些以前没有的记录。但请参阅我关于货币字段的问题的更新
  • 我错过了将 slas.currency 字段添加到第二个查询,已编辑修复。您也可以在 sql 中执行此案例。 CASE slas.currency WHEN 1 THEN '£'当 2 时 '$' WHEN 3 THEN '€' ELSE '&磅;' END 作为货币
  • 似乎适用于第一个查询,但不适用于第二个。现在第二个根本没有显示任何记录。
猜你喜欢
  • 2021-06-23
  • 2019-09-03
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2010-10-22
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多