【问题标题】:Need to use left join with limit but it works wrong需要使用带限制的左连接,但它工作错误
【发布时间】:2018-07-08 09:41:01
【问题描述】:

我有两个sql查询:

1)

SELECT DISTINCT item_id  
FROM sh_itemviews WHERE login='".$login."' 
ORDER by time DESC LIMIT 5"

2)

SELECT * 
FROM sh_item WHERE id=itemIdFrom  sh_itemviews "

所以我想做得更好,我正在尝试使用 LEFT JOIN:

SELECT DISTINCT * 
FROM sh_itemviews 
      LEFT JOIN sh_item ON sh_item.id = sh_itemviews.item_id; 
WHERE sh_itemviews.login='".$login."' 
ORDER by sh_itemviews.time DESC LIMIT 5"

就像结果一样,我有所有数据,其中 sh_item.id = sh_itemviews.item_id;但其他构造 WHERE 被忽略。 我做错了什么? 谢谢!

【问题讨论】:

    标签: php sql pdo sqlite


    【解决方案1】:

    WHERE 语句之前有一个分号。

    "SELECT DISTINCT * FROM sh_itemviews LEFT JOIN sh_item ON sh_item.id = sh_itemviews.item_id**;** WHERE sh_itemviews.login='".$login."' ORDER by sh_itemviews.time DESC LIMIT 5"
    

    正确的是:

    "SELECT DISTINCT * 
    FROM sh_itemviews 
    LEFT JOIN sh_item ON sh_item.id = sh_itemviews.item_id 
    WHERE sh_itemviews.login='".$login."' 
    ORDER by sh_itemviews.time DESC 
    LIMIT 5"
    

    【讨论】:

      【解决方案2】:

      WHERE 子句前的 semi column 是原因,请在下面找到更新后的查询

       SELECT DISTINCT * 
       FROM sh_itemviews 
            LEFT JOIN sh_item ON sh_item.id = sh_itemviews.item_id 
       WHERE sh_itemviews.login='".$login."' 
       ORDER by sh_itemviews.time DESC LIMIT 5"
      

      【讨论】:

        【解决方案3】:

        你在 where 之前的语法不正确 试试这个语法

        SELECT DISTINCT * 
        FROM sh_itemviews 
        LEFT JOIN sh_item ON sh_item.id = sh_itemviews.item_id
        
        WHERE sh_itemviews.login='".$login."' 
        ORDER by sh_itemviews.time DESC
        LIMIT 5"
        

        【讨论】:

        • 答案需要格式化,但我刚刚看到它与比您早 20 分钟发布的答案相同。可能是由于复习第一个问题。无论如何..我为你做了一些重新格式化。
        猜你喜欢
        • 1970-01-01
        • 2014-03-29
        • 1970-01-01
        • 2023-04-02
        • 2012-08-03
        • 2017-04-22
        • 2022-10-13
        • 1970-01-01
        • 2011-12-20
        相关资源
        最近更新 更多