【问题标题】:How do I select something in MYSQL without selecting it twice if its in the row如果它在行中,我如何在 MYSQL 中选择一些东西而不选择它两次
【发布时间】:2012-02-23 21:21:11
【问题描述】:

标题可能听起来令人困惑。但这是我的问题。我想显示在数据库中显示的内容,但它可能显示在多行中。例如:

2
2
1
1
1
1
1
1
2

我想显示这个数据,但我不希望它重复,我只想让它显示 2s 和 1s 一次。

我现在拥有的:

$TheSQL = 'SELECT * FROM `table` WHERE `1`="'.$profileID.'" ORDER by RAND() LIMIT 10';

【问题讨论】:

    标签: php mysql select


    【解决方案1】:

    您可以将SELECT * 更改为SELECT DISTINCT *

    【讨论】:

      【解决方案2】:

      使用 DISTINCT

      DISTINCT 允许您从结果集中删除重复的行。它是这样使用的:

      SELECT DISTINCT *
      FROM tablename
      

      请注意,DISTINCT 适用于结果集中所有返回的列。因此,如果您要返回多个字段,并且要将其应用于特定字段,DISTINCT 将不是答案。

      例如,给定以下数据集:

      user_id      whatever
      ----------------------
      1            this
      1            that
      2            this
      2            this
      

      以下查询:

      SELECT DISTINCT user_id, whatever
      FROM tablename
      

      返回:

      1            this
      1            that
      2            this
      

      它只删除了重复的 2, this 行,因为考虑到这两列,那是唯一的重复。

      但是,如果我选择这样的单个列:

      SELECT DISTINCT user_id
      FROM tablename
      

      我会得到以下期望的结果:

      1
      2
      

      使用 GROUP BY

      因此,如果您选择多列但只希望其中一列不同,您可以像这样使用GROUP BY

      SELECT DISTINCT user_id, whatever
      FROM tablename
      GROUP BY user_id
      

      这给出了以下结果,每个不同的 user_id 只返回一行:

      1            this
      2            this
      

      不过,这些结果也可能是一样的:

      1            that
      2            this
      

      非分组列的值将是任意的。事实上,MySQL 4.x 甚至不会接受上面的GROUP BY 查询。 MySQL 4.x 不允许您混合聚合(分组)和非聚合列。因此,最好使用以下查询:

      SELECT DISTINCT user_id, MAX(whatever)
      FROM tablename
      GROUP BY user_id
      

      现在,第二列的结果不是任意的:

      1            this
      2            this
      

      【讨论】:

        【解决方案3】:
        SQL = 'SELECT DISTINCT * FROM `table` WHERE `1`="'.$profileID.'" ORDER by RAND() LIMIT 10';
        

        ...DISTINCT 是关键

        【讨论】:

          猜你喜欢
          • 2018-01-11
          • 1970-01-01
          • 2017-01-31
          • 2016-04-05
          • 2010-12-07
          • 1970-01-01
          • 2022-01-21
          • 2023-03-08
          • 1970-01-01
          相关资源
          最近更新 更多