我有5张桌子。
advertisingcompany Table id PK name placement Table id PK name advertiser Table id PK name location Table id PK name ads Table ad_id PK size price advertisingcompanyId FG placementId FG advertiserId FG locationId FG
我无法弄清楚如何显示外键数据。我可以获得例如“advertisingcompanyId”或“placementId”,但问题是获取广告公司的名称,而不是广告公司名称,广告公司表格或展示位置名称位于展示位置表格中。
我尝试了这个查询:
$query = "SELECT ad_id, size, price, ads.advertisingcompanyId, ads.placementId, ads.advertiserId, locationId
FROM ads
INNER JOIN advertisingcompany ON ads.advertisingcompanyId = advertisingcompany.id
WHERE ad_id = '$ad_id'";
对于我想要的数据,这是正确的SQL查询吗?如果是我如何添加到该查询,我将获得所有外键的名称? 那我怎么能在php中显示数据呢? 感谢
答案 0 :(得分:1)
对于我想要的数据,这是正确的SQL查询吗?
是
如果是如何添加到该查询,我将获得所有外键的名称?
指定您要选择的名称列并添加addiitonal JOIN
子句:
SELECT ads.*,
advertisingcompany.name AS adco,
placement.name AS placement
FROM ads JOIN advertisingcompany ON ...
JOIN placement ON ...
-- etc.
请注意,如果某些外键可能是NULL
,您可能希望使用outer joins。
如何在php中显示数据?
连接MySQL,执行查询,然后遍历结果集:
$dbh = new PDO("mysql:dbname=$dbname;charset=utf8", $username, $password);
$qry = $dbh->query($query);
while($row = $qry->fetch()) print_r($row);
请小心避免SQL注入攻击,使用prepared statements将用户输入作为参数传递给SQL,这些参数不会被SQL评估!如果您不知道我在说什么,请阅读Bobby Tables的故事。
答案 1 :(得分:0)
SELECT ad_id, size, price,
c.name as company_name,
p.name as placement_name,
a.name as advertiser_name,
locationId
FROM ads
INNER JOIN advertisingcompany c ON ads.advertisingcompanyId = c.id
INNER JOIN placement p ON ads.placementId = p.id
INNER JOIN advertiser a ON ads.advertiserId = a.id
WHERE ad_id = '$ad_id'