【问题标题】:Unique/Distinct values from a PHP/MYSQL query来自 PHP/MYSQL 查询的唯一/不同值
【发布时间】:2011-07-20 04:28:34
【问题描述】:

我有一个数据库,其中包含字段 type1type2type3type4 一直到 type19,以及其他字段。我要做的是从这些行中获取所有字段,然后只回显不重复的字段。

我曾尝试使用select distinct type1, type2 etc from products,但不知道将所有字段($_row['type1']$_row['type2'] 等)放入单个变量然后从该变量回显所有不同值的 php 代码。有人有什么建议吗?

【问题讨论】:

    标签: php mysql database unique distinct


    【解决方案1】:

    遍历您的结果并将它们添加到数组中。然后使用 array_unique() 只返回唯一值。

    http://php.net/manual/en/function.array-unique.php

    如果可能的话,你绝对应该重新考虑你的数据库设计,因为这是一种非常糟糕的做事方式。

    【讨论】:

    • 同意,这是一种糟糕的做事方式。但是,您的答案是 OP 所要求的:/。这种方式对服务器来说真的很重,因为你必须返回所有你的结果,然后处理每一个,服务器端......哎呀。
    • 是的,答案有效,我只是想知道最好的方法是什么,因为每个人都说数据库设计不好
    • 并不意味着听起来充满敌意 - 实际上您的数据库设计可能没问题。我的意思是,简单的数据操作(如排序或查找唯一值)通常最好在 SQL 中进行。但请保持好奇心的精神:)
    【解决方案2】:

    如果你只想使用 SQL 查询,你可以说

    SELECT DISTINCT type1 FROM products ORDER BY type1 
    

    另一种选择是

    SELECT type1, max(1) FROM products GROUP BY type1 
    

    缺点是,如果您想获得所有列的不同值,则必须执行 19 次查询。

    好处是,如果您想要一列有不同的值,这会容易得多。

    您可以将 19 个查询批处理到 for 循环中,也许:

    for($i=1;$i<20;$i++) {
      $sql = "SELECT DISTINCT type".$i." FROM products ORDER BY type1";
      // Run the sql query to get the data, then manipulate it as you wish.
    }
    

    【讨论】:

      【解决方案3】:

      使用 UNION 将 19 个查询的结果连接为子查询。

      SELECT DISTINCT a FROM (
        SELECT DISTINCT type1 AS a FROM products
        UNION
        SELECT DISTINCT type2 AS a FROM products
        UNION 
        ...
        SELECT DISTINCT type19 AS a FROM products
      ) ORDER BY a
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 2014-09-02
        相关资源
        最近更新 更多