一个查询两个相似的表

时间:2013-05-24 19:18:31

标签: php mysql ajax json

我有两个相同字段的相似表格。一个名为“input”,另一个名为“product”,两者都有相同的字段:

  • ID
  • 名称
  • 数量
  • 单元
  • pic(fk - 两者都引用相同的图片表)。

我的第一个问题是:如何编写查询以有效地返回每个项目的详细信息?

我使用JSON导出此数据

$json_data.='"rec'.$i.'":{"id":"'.$id.'", "name":"'.$name.'", "price":"'.$price.'", "qty":"'.$qty.'", "units":"'.$unit.'", "pic":"'.$pic.'"},';`. 

我的第二个问题是:我如何有效地引用两个表中的所有字段?

注意:我不想将这两个类别放在同一个表格中,例如item,其他字段为category

只是为了纠正这个:连接条件是(input.pic = pic.id and product.pic = pic.id)

3 个答案:

答案 0 :(得分:1)

如果表格具有相同的字段,则可以进行联合查询。

 SELECT * FROM table1
 UNION 
 SELECT * FROM table2

如果它们与您说的相似,那么您只需选择它们共有的字段

 SELECT "table1" as source_table,id,name,qty,unit,price from table1
 UNION
 select "table2" as source_table,id,name,qty,unit,price from table2

注意我添加了一个源表,因此您可以回溯它从哪里获得....欢呼

答案 1 :(得分:0)

在mysql中使用full outer这是不可能的,所以使用/ take union的帮助来获取所有行

SELECT * FROM input
LEFT JOIN product ON input.id = product.id
UNION
SELECT * FROM input
    RIGHT JOIN product ON input.id = product.id

答案 2 :(得分:0)

该场景的问题是“有效”这个词。图片输入 - leftjoin比内部联接慢,left join inputleft join output之和慢于简单inner join

select pic.id as pic_id, pic.data, input.id as input_id, output.id as output_id, input....
from pic 
left join input on input.pic_id = pic.id
left join output on output.pic_id = pic.id

select pic.id as pic_id, pic.data, "input" as type, input.id as id, input....
from pic 
inner join input on input.pic_id = pic.id
union
select pic.id as pic_id, pic.data, "output" as type, output.id as id, output....
from pic 
inner join output on output.pic_id = pic.id

由于使用了两个内部联接,联合更快。