【问题标题】:SQL problems - same field names in multiple MySQL tables?SQL 问题 - 多个 MySQL 表中的相同字段名称?
【发布时间】:2011-12-05 21:28:40
【问题描述】:

我有一个关键字搜索,它使用 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

【问题讨论】:

  • 请注意,使用* 来命名所有列并不是一个好习惯,即使如果您需要返回所有列.. :)跨度>

标签: php mysql sql join union


【解决方案1】:

您需要命名您的表字段名称:

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

【讨论】:

    【解决方案2】:

    为两个子查询添加一个派生字段,这样您就可以确定该特定行来自哪个表:

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

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

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

    【讨论】:

      【解决方案3】:

      别忘了你可以使用 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%  
      

      【讨论】:

      • 我猜我们都得了-1,因为我们回答了一般性问题,而不是抱怨设计缺陷;为其他浏览问题/答案的人提供答案/价值,或者可能陷入其他人的不良表格设计,以至于不允许他们更改。
      【解决方案4】:
      SELECT *, 1 as table_reference
      FROM table1
      WHERE id = colname
      UNION ALL
      select *,2
      FROM table2
      WHERE id = colname
      

      【讨论】:

        【解决方案5】:

        你的 id 没有被 mysql 组合在一起。只是您将数据库结果请求为关联的 php 数组,列名作为数组键。你不能有重复的数组键,所以你只能得到其中一个值。

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

        【讨论】:

          【解决方案6】:

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

          这是一个巨大的设计缺陷

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

          2) 如果您的表格不同并且您只需要显示一张图片 - 在视图页面上使用联合有什么意义?如果只是一张表中的一张图片 - 为什么要查询 2 张表?

          【讨论】:

            猜你喜欢
            • 2017-03-03
            • 1970-01-01
            • 1970-01-01
            • 2019-02-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-09-30
            • 1970-01-01
            相关资源
            最近更新 更多