SQL问题 - 多个MySQL表中的相同字段名称?

时间:2011-12-05 21:28:41

标签: php mysql sql join union

我有一个关键字搜索,它使用UNION ALL在多个数据库表中搜索缩略图。我有两个页面,results.php和view.php。我的目标是能够在results.php上单击缩略图图像,并将其定向到view.php上相同图像的更大版本。问题是我所有表中的每个图像都使用字段名称“id”,所以当我点击results.php上的缩略图时,我会从不同的表中获得两个具有相同id的不同图像。我尝试将id更改为不同的名称,但是当需要传递url参数时,我只能选择1个值。 (如果你可以选择超过1我不知道如何)。所以我的问题是为什么我的不同表中的id被组合在一起,我怎么能改变它?

图像结果页面(完美无缺):

 SELECT *
    FROM table1
    WHERE keyword LIKE %colname% OR id  LIKE %colname%  
    UNION ALL
    SELECT *
    FROM table2
    WHERE keyword LIKE %colname% OR id  LIKE %colname%  

查看图片页面(此处有问题):

SELECT *
FROM table1
WHERE id = colname
UNION ALL
FROM table2
WHERE id = colname

6 个答案:

答案 0 :(得分:0)

您需要命名表字段名称:

SELECT * FROM table1 WHERE table1.id = colname UNION ALL FROM table2 WHERE table2.id = colname

答案 1 :(得分:0)

向两个子查询添加派生字段,以便您可以确定特定行来自哪个表:

SELECT 'table1' AS source, *
FROM table1
...
UNION ALL
SELECT 'table2' AS source, *
FROM table2

然后让您的代码检查新的“source”字段,以便稍后在显示该图像时指向相应的DB表。

当然,如果两个表都具有相同的结构,那么就会出现这样的问题:为什么不将它们组合到一个表中并在这个新的“全局”表中添加这个“源”字段,从而省去了必须运行两个查询才能获取图像数据。

答案 2 :(得分:0)

不要忘记您可以使用AS关键字来对字段和表格进行别名

SELECT *
FROM table1 as t1
WHERE t1.keyword LIKE %colname% OR t1.id  LIKE %colname%  
UNION ALL
SELECT *
FROM table2 as t2
WHERE t2.keyword LIKE %colname% OR t2.id  LIKE %colname%  

答案 3 :(得分:0)

SELECT *, 1 as table_reference
FROM table1
WHERE id = colname
UNION ALL
select *,2
FROM table2
WHERE id = colname

答案 4 :(得分:0)

你的id不是由mysql组合在一起的。只是你要求数据库结果作为关联的php数组,列名作为数组键。您不能拥有重复的数组键,因此您只能获得其中一个值。

如果您不需要知道表的名称,只需获取数字索引数组而不是关联数组。如果需要表名,可以修改sql以对列进行别名,也可以使用更自动化的方法 SQL Select * from multiple tables

答案 5 :(得分:0)

1)如果所有表格都具有相同的结构,

这是一个巨大的设计缺陷

你应该将它们合并到一个表中。

2)如果您的表格不同而且您只需要显示一张图片 - 在视图页面上使用union的重点是什么?如果它只是一个表中的一个图像 - 为什么要查询2个表?