Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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
3个连接的mysql表的最新记录_Mysql_Sql_Join - Fatal编程技术网

3个连接的mysql表的最新记录

3个连接的mysql表的最新记录,mysql,sql,join,Mysql,Sql,Join,几天来,我一直在绕圈子问这个问题,这让我发疯。我已经找到了使用maxdate和left联接的部分答案,但尚未获得正确的结果,因此非常感谢您的帮助 我有三张桌子:- 存货 身份证件 很多其他领域 销售价格 身份证件 日期 *票证类型 *库存标识 车票类型 身份证件 车票名称 每次更改销售价格时,销售价格表都会更新日期和新的票证类型。我只想显示:- 查找最新的销售价格记录 显示与此相关的库存信息 显示与此相关的票证名称 我提出的问题是:- $result = " SELECT DIS

几天来,我一直在绕圈子问这个问题,这让我发疯。我已经找到了使用maxdate和left联接的部分答案,但尚未获得正确的结果,因此非常感谢您的帮助

我有三张桌子:-

存货 身份证件 很多其他领域

销售价格 身份证件 日期 *票证类型 *库存标识

车票类型 身份证件 车票名称

每次更改销售价格时,销售价格表都会更新日期和新的票证类型。我只想显示:-

查找最新的销售价格记录 显示与此相关的库存信息 显示与此相关的票证名称 我提出的问题是:-

    $result = "
    SELECT DISTINCT inv.*, tt.ticket_name, MAX(sp.date) AS spdate 
               FROM sale_price sp 
               LEFT 
               JOIN ticket_type tt 
                 ON sp.ticket_type_id = tt.id
               JOIN inventory inv 
                 ON sp.inventory_id = inv.id                  
              GROUP 
                 BY sp.inventory_id
     ";
但它显然不起作用。我真的很感激你能给予我的任何帮助,如果不是太多的话,请告诉我我哪里出了问题


多谢期待

如果您只想知道所有记录的最新记录,则可以使用以下查询:

SELECT
    s.ticket_type_id,
    s.inventory_id,
    t.ticket_name,
    i.lots of other fields  
FROM
    sale_price s
INNER JOIN
    inventory i
ON
    s.inventory_id = i.id
INNER JOIN
    ticket_type t
ON
    s.ticket_type_id = t.id;
WHERE
    s.date = (
        SELECT
            MAX(s1.date)        
        FROM
            sale_price s1
    ) 
如果您需要每个库存项目的最新记录,那么您必须使用子选择的WHERE子句中库存id的相等性来扩展此查询:

SELECT
    s.ticket_type_id,
    s.inventory_id,
    t.ticket_name,
    i.lots of other fields  
FROM
    sale_price s
INNER JOIN
    inventory i
ON
    s.inventory_id = i.id
INNER JOIN
    ticket_type t
ON
    s.ticket_type_id = t.id;    
WHERE
    -- gives us the newest date per inventory_id
    s.date = (
        SELECT
            MAX(s1.date)
        FROM
            sale_price s1
        WHERE
            s.inventory_id = s1.inventory_id
    )

顺便说一句,这是一个相关子查询,它可能会变慢。

首先,非常感谢您的回复-我不知道我可以在WHERE子句中使用子查询,这打开了一个全新的可能性世界!我尝试了您提供的查询,但它表示语法错误。我相信这是我做过的,我已经经历过很多次了,但我看不出问题在哪里——有什么想法吗?我将发布另一条评论,因为我将用尽空间…查询失败:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在第7行的“s.inventory\u id=i.id内部连接票据\u type t ON”附近使用的正确语法,选择s.ticket\u type\u id、s.inventory\u id、t.ticket\u name,i.*从售价s中选择MAXs1.date,其中s.date=从售价s2中选择MAXs1.date,其中s1.inventory\U id=s2.inventory\U id内部加入s上的库存i.inventory\U id=i.id内部加入票证\U类型\U id=t.id可能我需要睡一会儿。JOIN子句必须在WHERE子句之前。我已经编辑了我的答案。再次感谢你。“字段列表”中的“未知列”s1.date“我的天啊,情况越来越糟了。我第二个问题中的一些愚蠢的错误。我使用了别名s和s1,所以我应该坚持使用它。。。就像现在一样。请尽量理解该声明,而不是简单地复制和粘贴。