2012-04-12 6 views
0

基本的にcar_color = yellowの車をすべて選択したい& car_gear = Manual。 これをどうすれば実現できますか?私は "???"の代わりに何を書かなければならないでしょうか? ? テーブルの作成は間違っていますか?2つのテーブルの項目をフィルタリングします。 mysqlの正規化

$sql = "SELECT * FROM 
    A 
JOIN 
    B 
ON 
    A.id=B.Aid WHERE ???"; 

表A

id title 
1 Toyota 
2 Volvo 

表B

id Aid  attr_name attr_val 
0 1  car_year 2012 
1 1  car_color red 
2 1  car_km  1000 
3 1  car_gear manual 
4 2  car_color black 
5 2  car_km  0 
6 2  car_gear Automat 
+2

テーブルを再設計する必要がありますか? – Taryn

+0

はwhere句なしで動作しないステートメントですか? – hjpotter92

答えて

0

をあなたがしたい場合は、あなたのテーブルを再設計する必要があるために私の提案は次のとおりです。私は、これまで行ってきた何

where句を正しく動作させる必要があります。ような何か:

create table tableB 
(
    id int, 
    Aid int, 
    car_year int, 
    car_color varchar, 
    car_km int, 
    car_gear varchar 
) 

次に、あなたがあなたのSQLを書き込むことができます。

SELECT * 
FROM A 
JOIN B 
    ON A.id=B.Aid 
WHERE car_color='yellow' 
    AND car_gear='Manual' 

それとも、車の変数ごとに別々のテーブルを作成する場所をさらに行くことができる - 今年、色、キロ、ギア。それは本当にあなたのニーズが何であるかにかかっています。あなたはそれを過度にしたくありません。

+0

今私のテーブル構造が間違っていると確信しています。しかし、私はテーブルAにcatを追加し、テーブルBにはcat_age = x cat_color = yを追加します。だからテーブルAには猫と車の両方があります。アイテムタイプごとに異なるテーブルを作成する必要がありますか?またはこれには良い解決策がありますか? –

+0

それは本当にあなたのニーズに依存して、車の詳細(年、km、色)と猫(年齢、色)の2番目のテーブルを含む1つのテーブルを作成することができますし、それら – Taryn

+0

ありがとうbluefeet。今、私は分かる。 :) –

関連する問題