【问题标题】:Trying to select all the records from table B that have the same name as most recently added record from table A尝试从表 B 中选择与表 A 中最近添加的记录同名的所有记录
【发布时间】:2011-08-04 14:38:26
【问题描述】:

我正在使用 php 和 MySQL。我有两张桌子。我想从表 PARTS 中选择与表 PRODUCTS 中最近添加的记录具有相同 prod_name 的所有记录。

PRODUCTS

  • id(自动递增)
  • 产品名称

PARTS:

  • 产品名称
  • part_name
  • part_cost

这会起作用还是我应该使用某种联接?

SELECT * FROM parts WHERE prod_name = (SELECT prod_name FROM products ORDER BY id DESC LIMIT 1)

【问题讨论】:

  • 执行查询时发生了什么?
  • 我认为您所拥有的嵌套选择是一个很好的解决方案。
  • 为什么在您的零件表中使用 prod_name 而不是 product_id??
  • prod_id 是在零件进入数据库时​​自动分配的。产品名称不会改变,所以它似乎是一个不错的解决方案。
  • 如果您不打算使用该 ID,那为什么还要使用它呢?其他人都可以在他们的其他表中使用自动增量 ID 作为外键,顺便说一句。这很容易做到。 MySQL 返回 INSERT 查询后生成的最后一个自动增量的 ID...mysql_insert_id() 在 PHP... 以便您在插入后续相关行时可以使用它。

标签: php mysql


【解决方案1】:

是的,它会起作用。您可以随时在 phpmyadmin 或 MySql 查询浏览器中执行查询来测试它。

返回插入的 id 并使用该 id 选择可能会更好。

【讨论】:

    【解决方案2】:
    SELECT
      parts.*
    FROM
      parts
    INNER JOIN
      products
    ON
      products.prod_name = parts.prod_name
    WHERE
      products.id = (SELECT MAX(id) FROM products)
    

    【讨论】:

      【解决方案3】:

      这应该可行 - 但如果产品有一个自动递增 id,为什么要使用 prod_name 作为 PARTS 表中的外键?

      如果用户想要更改 prod_name,这样的设计会给您带来额外的工作(然后您必须检查并更改所有 PARTS 上的 prod_name,除非您不介意它们失去连接)。

      另外,它不节省空间(除非 prod_name 总是很短)。

      【讨论】:

      • 产品名称总是很短,永远不会改变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多