2011-08-04 6 views
0

私はPHPとMySQLを使用しています。私は2つのテーブルを持っています。テーブルPRODUCTSの中で最後に追加されたレコードと同じprod_nameを持つテーブルPARTSのすべてのレコードを選択したいとします。テーブルAの最新のレコードと同じ名前のテーブルBのすべてのレコードを選択しようとしています

PRODUCTS

  • ID(オートインクリメント)
  • PROD_NAME
PARTS

表:

  • PROD_NAME
  • part_nameを指定
  • part_cost

これは機能しますか、何らかの結合を使用する必要がありますか?

動作するはず
SELECT * FROM parts WHERE prod_name = (SELECT prod_name FROM products ORDER BY id DESC LIMIT 1) 
+0

クエリを実行したときに何が起こりましたか? –

+0

入れ子の選択を使って、あなたが持っているものは良い解決策だと思います。 –

+0

なぜ部品表のproduct_idではなくprod_nameを使用していますか? –

答えて

1

はいはい。 phpmyadminまたはMySql Query Browserでクエリを実行してテストすることができます。

挿入されたIDを返し、そのIDを使用して選択する方がよい場合があります。

0
SELECT 
    parts.* 
FROM 
    parts 
INNER JOIN 
    products 
ON 
    products.prod_name = parts.prod_name 
WHERE 
    products.id = (SELECT MAX(id) FROM products) 
0

- しかし、製品が自動インクリメントIDを持っている場合は、なぜあなたは、PARTS表の外部キーとしてPROD_NAMEを使用していますか?

このような設計では、ユーザーがprod_nameを変更したい場合に余分な作業が必要になります(接続が失われても構わない限り、すべてのPARTSのprod_nameを変更しなければなりません)。

さらに、スペース効率が悪いです(prod_nameが常に非常に短い場合を除く)。

+0

商品名は常に短く、決して変更されません。 –

関連する問題