Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试添加内部联接时SQL查询不起作用_Php_Mysql_Join - Fatal编程技术网

Php 尝试添加内部联接时SQL查询不起作用

Php 尝试添加内部联接时SQL查询不起作用,php,mysql,join,Php,Mysql,Join,我有一个SQL语句,我今天终于开始工作了,然后我想添加一个内部连接来返回我的标签,而不是数字,但无法让它工作 SELECT s.ship_name, s.company_name, p.port_name, p.port_country, t1.port_id, t1.port_date, t1.ship_id, t1.arrival_ti

我有一个SQL语句,我今天终于开始工作了,然后我想添加一个内部连接来返回我的标签,而不是数字,但无法让它工作

    SELECT  
         s.ship_name,
         s.company_name,
         p.port_name,
         p.port_country,
         t1.port_id, 
         t1.port_date,
         t1.ship_id,
         t1.arrival_time,
         t1.depart_time
    FROM 
        port_days t1
    INNER JOIN  
        ships s, ports p
    ON 
        t1.ship_id = s.ship_id 
        AND t1.port_id = p.port_id 
    WHERE 
        (ship_id = '" . $ship_id . "' OR ship_id = '" . $ship2_id . "') 
        AND EXISTS (SELECT 
                        port_id, port_date
                    FROM 
                        port_days t2
                    WHERE (ship_id = '" . $ship_id . "' 
                        OR ship_id = '" . $ship2_id . "') 
                        AND t1.port_date >= '" . $start_date . "'
                        AND t1.port_date <= '" . $end_date . "'
                        AND t1. port_id = t2. port_id
                        AND t1. port_date = t2. port_date
                        HAVING COUNT(port_day_id) > 1)                         
   ORDER BY port_date)
我有三张桌子:港口、港口和轮船

我今天写的问题是

    SELECT  
        t1.port_day_id, 
        t1.port_id, 
        t1.port_date,
        t1.ship_id,
        t1.arrival_time,
        t1.depart_time
    FROM 
        port_days t1
    WHERE 
        (ship_id = '140' OR ship_id = '145') 
    AND EXISTS (SELECT 
                     port_id, port_date
                FROM 
                     port_days t2
                WHERE 
                     (ship_id = '140' OR ship_id = '145') 
                     AND t1.port_date >= '2016-02-01'
                     AND t1.port_date <= '2016-10-01'
                     AND t1. port_id = t2. port_id
                     AND t1. port_date = t2. port_date
                     GROUP BY port_id, port_date
                     HAVING COUNT(port_day_id) > 1)
   ORDER BY port_date
ship和ports表包含ID和标签

这就是我希望能回来的

{港口名称:南安普敦,港口国家:英格兰,港口日期:2016-06-18,船名:阿卡迪亚,公司名称:p&O邮轮,到达时间:06:30:00,离开时间:16:30:00}


提前谢谢

试试这样

SELECT  
     s.ship_name,
     s.company_name,
     p.port_name,
     p.port_country,
     t1.port_id, 
     t1.port_date,
     t1.ship_id,
     t1.arrival_time,
     t1.depart_time
FROM         port_days t1
INNER JOIN   ships     s  ON t1.ship_id = s.ship_id 
INNER JOIN   ports     p  ON t1.port_id = p.port_id 
WHERE  (t1.ship_id = '" . $ship_id . "' OR t1.ship_id = '" . $ship2_id . "') 
  AND EXISTS (SELECT 
                    port_id, port_date
                FROM 
                    port_days t2
                WHERE (ship_id = '" . $ship_id . "' 
                    OR ship_id = '" . $ship2_id . "') 
                    AND t1.port_date >= '" . $start_date . "'
                    AND t1.port_date <= '" . $end_date . "'
                    AND t1. port_id = t2. port_id
                    AND t1. port_date = t2. port_date
                    HAVING COUNT(port_day_id) > 1)                         
ORDER BY port_date

请记住,内部连接在port_days和ships之间工作,将其他表字段放在ON部分是没有意义的。因此,如果要关联其他表,则需要第二个内部联接

FROM 
    port_days t1
INNER JOIN  
    ships s ON t1.ship_id = s.ship_id 
INNER JOIN ports p ON t1.port_id = p.port_id

1 ms sql和mysql是两种不同的产品。你用哪一种?2您遇到的错误消息或意外行为是否属于机密信息?请尝试描述您正在执行的操作。可能有一种更简单的方法来编写查询。我想我很幸运,在我开始学习MySQL时,EXISTS这样的结构并不存在,或者只是没有被使用。撇开性能问题不谈,对于初学者来说,它们似乎只是碍事而已。不要混合使用隐式逗号和显式连接样式。事实上,不要使用逗号连接EVER@Shadow我使用的是mysql,很抱歉造成混乱,谢谢你指出我没有意识到这一点。现在对我来说这很有意义。正如@mhyst提到的拆分加入一样,我更新了我的代码,但当我看到你的答案时,它仍然返回null,我以为是这样的:-