我想获得有关每个item
的所有信息。 Items具有全局变量(此处为on_stock
),但每个项目在不同的表中也有自己的属性,该表名称与项目类型名称相同。
name
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
请帮助实现这一目标!
答案 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)
每次添加新项目类型时都必须调整查询,但这只是此数据结构的缺点。