1

すべての に関するすべての情報を取得したいと思いますitem。アイテムにはグローバル変数 (ここではon_stock) がありますが、すべてのアイテムには別のテーブルに独自のプロパティもあり、そのテーブルにはアイテムの型名と同じ名前が付けられています。

  1. アイテムを選択
  2. タイプ テーブル ID でその type_id を結合します ->name
  3. 選択したアイテムをname.idで結合

サンプルは次のとおりです。

[items]
 id  | on_stock |  type_id
-----+----------+-----------
  1       1        1(=car)
  2       0        1(=car)
  3       1        2(=ship)
  4       0        2(=ship)

[types]
 id |  name
----+--------
  1     car
  2    ship

[car]
 id | top_speed
----+-----------
 1       200
 2       300

[ship]
 id  | color
-----+-------
 3     red
 4     blue

期待される結果:

1 on_stock=1 top_speed=200
2 on_stock=0 top_speed=300
3 on_stock=1 color=red
4 on_stock=0 color=blue

これを達成するために助けてください!

4

2 に答える 2

0

きれいではありませんが、データ構造もそうではありません。ここにあなたが望むことをするためのクエリがあります

SELECT I.id, I.On_stock, C.top_speed,S.Color
FROM ITEMS I
LEFT JOIN Car C ON (I.ID = C.CarID)
LEFT JOIN Ship S ON (I.ID = S.ShipID)

新しい項目タイプを追加するたびにクエリを微調整する必要がありますが、それはこのデータ構造の欠点です。

于 2012-06-21T14:09:50.667 に答える
0

1 回のリクエストでできなかった場合は、さらに (1 + アイテムの種類の数) で行います。

まず、必要な型が配列 (id=>name) として必要です。

$req_types = array();
    $rs = mysql_query("
        SELECT items.type_id,types.name
        FROM items 
        JOIN types ON items.type_id=type.id 
        GROUP BY items.type_id
        ");
    while($type= mysql_fetch_assoc($rs))
        $req_types[$type['id']] = $type['name'];

次に、共通項目データと個別項目データが必要です。

$groups = array();     
foreach($req_types as $table)
        {
            $rs = mysql_query("
                    SELECT items.*,$table.*
                    FROM items 
                    JOIN $table ON $table.id=items.id
                    ");
            while($item = mysql_fetch_assoc($rs))
                $groups[$table][] = $item;
        }
于 2012-06-21T10:57:07.807 に答える