选择并加入动态表名称

时间:2012-06-20 14:09:12

标签: mysql select join

我想获得有关每个item的所有信息。 Items具有全局变量(此处为on_stock),但每个项目在不同的表中也有自己的属性,该表名称与项目类型名称相同。

  1. 选择项目
  2. 在类型表ID上加入其type_id - > name
  3. 加入name上的所选项目.id
  4. 以下是样本:

    [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
    

    请帮助实现这一目标!

2 个答案:

答案 0 :(得分:0)

如果我无法在一个请求中执行此操作,我会更多地执行此操作(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;
        }

答案 1 :(得分: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)

每次添加新项目类型时都必须调整查询,但这只是此数据结构的缺点。