php - mysql 查询 - 不要在多个 (5) 列中显示重复项?

标签 php mysql sql

关于此的讨论有很多,但我似乎无法找到可行的解决方案。这是我的查询:

 $sql = "SELECT DISTINCT `People`,`People2`,`People3`,`People4`,`People5`
 FROM `album1` 
 WHERE `People` != '' ORDER BY `People`";

我遇到了多个问题。首先,重复项仍在显示。另外,我不知道如何在多个列上执行 WHERE...

例如,表格看起来像这样。

 People | People2  | People3 | People4 | People5  
--------+----------+---------+---------+--------
 Alex   |   Frank  |         |         | John      
 Alex   |          | John    | Frank   |

它们主要用于“标记”照片。由于可以在 5 个人员输入字段中的任何一个中输入一个人的姓名,因此姓名会到处都是。

我所做的只是尝试让名称出现一次。 People != '' 不显示空单元格。

有什么想法吗?如果我需要包含更多信息,请告诉我。

最佳答案

您应该对此进行反规范化,这样您就只有一个 People 列。您可能应该将其称为 Person 以强调其独特性。

但是,如果由于某种原因您不能在您的数据模型中这样做,那么您可以这样做。它创建了一个虚拟的单个 Person 列。

SELECT DISTINCT People as Person, Place, Year, Filename, Orientation
FROM (
  SELECT People AS People, Place, Year, Filename, Orientation
    FROM ALBUM1
   WHERE People IS NOT NULL and People <> ''
  UNION ALL
  SELECT People1 AS People, Place, Year, Filename, Orientation
    FROM ALBUM1
   WHERE People1 IS NOT NULL and People1 <> ''
  UNION ALL
  SELECT People2 AS People, Place, Year, Filename, Orientation
    FROM ALBUM1
   WHERE People2 IS NOT NULL and People2 <> ''
 /* etc */
)a
ORDER BY People, Place, Year, Filename, Orientation

关于php - mysql 查询 - 不要在多个 (5) 列中显示重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949058/

相关文章:

javascript - 如何让jquery选择选项

php - Lua 与 PHP 随机数

mysql - 如何将 RIGHT LEFT 函数转换为 codeigniter 事件记录

php - WordPress像php mysql中的父子多级类别一样

sql - Magento - 模块插入、更新、删除、选择代码

mysql - 如何减少 MySQL 查询中列中所有单元格的值?

php - ChartJs php数组变成 'labels'和 'datasets'

php - 更改单个事件的背景颜色

php - 通过 PHP 从 ajax 访问 MySQL 数据库

mysql - 尝试在插入时插入另一个数据库时触发器抛出错误