繁体   English   中英

如何在 PHP 脚本中将表与自身连接起来进行查询,并告诉脚本从哪个表中选择哪一列?

[英]How canI join a table with itself for a query in a PHP script, and tell the script which column to pick from which table?

对不起,如果标题令人困惑,但我会解释。 我在 PhpMyAdmin 中有一个数据库,我正在尝试对一个与自身相连的表进行查询,在那里我为具有相同供应商的公司提取公司名称对,没有重复。 我的表是:

Suppliers(id_sup, sup_name)
Companies(id_co, co_name)
Objects(id_obj, obj_name)
Deliveries(id_sup, id_co, id_obj)

这是我的代码:

$sql = "SELECT DISTINCT c.co_name, cc.co_name
        FROM Deliveries d 
            INNER JOIN Companies c ON d.id_co = c.id_co, 
                                Deliveries dd 
            INNER JOIN Companies cc ON dd.id_co = cc.id_co

        WHERE d.id_obj = dd.id_obj 
        AND d.id_sup = dd.id_sup 
        AND d.id_co < dd.id_co;";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table border = '1'; align ='center'><tr><th>Company name</th><th>Company name</th></tr>";
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["co_name"]."</td><td>".$row["co_name"]."</td></tr>";
    }
    echo "</table>";

这是代码的重要部分。 但是,当我打印出结果时,PHP 仅从两列上从“c.co_name”返回的数据。 在 SQL 中很容易告诉他它实际上是 2 个表,因为我使用别名。 但是当我尝试返回结果时,我怎么能在 php 脚本中做到这一点。 这部分正是:

echo "<table border = '1'; align ='center'><tr><th>Company name</th><th>Company name</th></tr>";

您实际上有表别名( ccc )。 所以你的属性需要别名。 我的意思是这样的:

$sql = "SELECT DISTINCT c.co_name as nameA, cc.co_name as nameB
        FROM Deliveries d 
            INNER JOIN Companies c ON d.id_co = c.id_co, 
                                Deliveries dd 
            INNER JOIN Companies cc ON dd.id_co = cc.id_co

        WHERE d.id_obj = dd.id_obj 
        AND d.id_sup = dd.id_sup 
        AND d.id_co < dd.id_co";

稍后像这样使用你的回声线:

echo "<tr><td>".$row["nameA"]."</td><td>".$row["nameB"]."</td></tr>";

希望能帮到你...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM