2010-02-04 66 views
3

我有一个网站在多个表中存储<select>选项,并根据单个页面提取所有相关的选项。目前,我结束了这样一个查询:SELECT foo FROM foo_tbl;SELECT bar FROM bar_tbl;etc。这不是一个真正的问题,但我必须逐个遍历每个选择结果。在MySQL中加入多个不相关的表格

我想他们都提取到一个单一的网格,然后像做

if $row['foo'] != NULL { add to the foo options } 
if $row['bar'] != NULL { add to the bar options } 
etc 

如果我使用像SELECT DISTINCT f.foo, b.bar FROM foo_tbl AS f, bar_tbl AS b查询,我风与行的每一个可能的组合(第一FOO第一第一条第二条,第二条第一条,第二条第二条等等)。

有没有办法做这样的选择,只有一个列中的每个元素的实例,并用空值填充列中的其余行?

+1

您建议的解决方案很糟糕,尤其是如果每种类型的选项数量不同。您应该运行多个查询,或者返回一个结果UNIONed,其中5.5年后的[Type,Value] – gahooa

回答

8

你可以做类似如下: 假设表foo有一个,b,c和表栏已列d栏,E,F

Select 'isFOO', a, b, c, null, null, null from foo 
Union All 
Select 'isBAR',null, null, null, d, e, f from bar 
+0

** NICE ** ...现在如果第一个参数显示数据来自哪个表,那么monksp的请求将被回答!我已经将其添加到您的答案中,如果您不喜欢,请随时回滚! – lexu

+0

诺诺好编辑我说:) – keith

+0

这很完美!非常感谢,你们俩。 – monksp

8

有你使用工会

select foo as "f1" from footable where ..whatever.. 
union 
select bar as "f1" from bartable where ..whatever.. 

这将给你一个结果集考虑..但如果表是真正没有任何关系。这仍然不会帮助你多少..

+1

列仍然有帮助。谢谢。 – Johnrad

1

也许是这样的:

(从那里,其中选择一个,NULL,NULL, '2' 号....)(选择A,B,C, '1' 从在那里有....数) UNION UNION (从中选择a,b,null,'3'作为编号......) 按编号排序