我有两张桌子:
表名:user_tracking
列:id,bill_no,container_type,origin_id,destination_id
表名:sea_ports
列:id,bill_no,port_name
我想编写一个查询来获取源端口名和目标端口名。
我的问题是:

select a.container_type,
       b.port_name as origin_port
from user_tracking a
left join sea_ports b
on a.bill_no = b.bill_no
where a.bill_number = '$bill_no'

如何将表origin_id中同一字段destination_id上的两列idsea_ports连接起来以获得两个不同的输出?

最佳答案

您需要加入表sea_ports两次,这样就可以得到每个原点和目的地的port_name。还有一件事,我想,你需要使用INNER JOIN而不是LEFT JOIN,因为总会有目的地和出发地,对吧?:D

SELECT  a.ID,
        a.bill_no,
        a.container_type,
        b.port_name AS Origin_name,
        c.port_name AS Destination_name
FROM    user_tracking a
        INNER JOIN sea_ports b
            ON a.origin_id = b.id
        INNER JOIN sea_ports c
            ON a.destination_id = c.id
WHERE   a.bill_number = '$bill_no'

另一方面,如果值来自外部,则查询容易受到SQL Injection的攻击。请看下面的文章,学习如何预防。通过使用PreparedStatements可以去掉在值周围使用单引号。
How to prevent SQL injection in PHP?

关于mysql - MySQL在一个列上加入两个列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14547692/

10-13 01:49