【问题标题】:Make limit to Join MySQL限制加入 MySQL
【发布时间】:2019-04-29 12:24:12
【问题描述】:

在我的代码中,我无法对每个加入的表进行限制,我总是看到 错误:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 4 行的“INNER JOIN products_images ON products.id=products_images.product_id LIMIT 1”附近使用正确的语法

SELECT products_images.image as products_image, products_description.name as products_name, products_details.price as products_price, products.id as products_id
FROM products
INNER JOIN products_description ON products.id=products_description.product_id LIMIT 1
INNER JOIN products_images ON products.id=products_images.product_id LIMIT 1
INNER JOIN products_details ON products.id=products_details.product_id LIMIT 1

【问题讨论】:

标签: php mysql mysqli pdo phpmyadmin


【解决方案1】:

那是因为那是无效的语法。如果您想限制与联接表比较的行,则需要将这些表替换为这些表上的子查询。

对你想要的结果做一些假设,一个简单的例子就是替换

INNER JOIN products_description ON products.id=products_description.product_id LIMIT 1

INNER JOIN (SELECT * FROM products_description AS d WHERE d.product_id = product.id ORDER BY d.id DESC LIMIT 1) AS pd

我不推荐这个确切的子查询,因为相关子查询(子查询的 WHERE 引用外部查询)通常效率很低;它将为products 中的每一行单独执行。 通常,这样的子查询应该找到“每个人的第一个”,包括(并且经常分组)“每个”的 id,然后在那个 id 上加入;因为这样可以避免代价高昂的关联。

【讨论】:

  • 我不知道如何,请帮助我
  • 查看编辑,并尝试搜索“mysql first for each”或“mysql last for each”
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2016-03-18
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
相关资源
最近更新 更多