【问题标题】:SQL query to get all records based on a certain column valueSQL查询根据某个列值获取所有记录
【发布时间】:2014-05-02 11:48:29
【问题描述】:

我得到了下表:

+---------+--------+---------+--------------+
|  ID     | Data 1 |Customer | Alternative  |
+---------+--------+---------+--------------+
| 1       |1abc    | 1       |1             |
+---------+--------+---------+--------------+
| 2       |2abc    | 1       |1             |
+---------+--------+---------+--------------+
| 3       |ae12    | 1       |2             |
+---------+--------+---------+--------------+
| 4       |ad31    | 1       |2             |
+---------+--------+---------+--------------+
| ...     |...     | ...     |...           |
+---------+--------+---------+--------------+

我需要以下信息:

  1. 确实存在多少种不同的替代方案 --> 填充 HTML
    选择框及其选项。

这里我们有 2 个备选方案。所以我会用备选方案 1 和备选方案 2 填充我的选择框。 然后,当用户选择一个备选方案时,我需要在 JSON 数组中写入基于该备选方案的所有记录。

例如:

用户选择备选方案 1

[1;1abc;1;1],[2;2abc;1;1]

或用户选择备选方案 2

[3;ae12;1;2],[4;ad31;1;2]

我试过了

$result = mysql_query("SELECT DISTINCT Alternative from $table)

但这仅返回 1 和 2,而不是全部记录。

【问题讨论】:

  • 您只选择了替代品,因此它给出了替代品的值
  • 为什么不直接使用 SELECT * FROM $table ORDER BY Alternative,然后在您的循环中测试您的 Alternative 值是否与前一个值相同。
  • ^ 不要那样做。这种过滤应该在 mysql 中完成,而不是不必要地循环遍历比你需要的更多的数据,以便在 PHP 中测试结果。
  • 抱歉一开始不清楚。我编辑了问题以更准确。

标签: php mysql ajax json


【解决方案1】:

你不能用一个查询来做到这一点。使用两个查询。一个用于获取不同的备选方案,一个用于获取每个备选方案的选项。

$result = mysql_query("SELECT DISTINCT Alternative FROM $table");
while ( $row = mysql_fetch_array( $result ) ) {
    $alt = $row['Alternative'];
    $res2 = mysql_query("SELECT * FROM $table WHERE Alternative = '$alt'");
    while( $row2 = mysql_fetch_array( $res2 ) ) {
        //put your HTML here
    }
}

【讨论】:

    【解决方案2】:

    这可以通过一种相当简单的方式完成。

    $query = "SELECT DISTINCT(alternative), id, data_1, customer 
              FROM table"
    $result_set = mysql_query($query,$connection);
    $count = mysql_num_rows($result_set);
    

    如果您只想寻找特定 id、customer 或 data_1 的替代品,也可以在查询中添加 WHERE 子句。

    【讨论】:

    • 这不起作用..它只会从表中获取所有值。不按替代方案
    【解决方案3】:

    根据我对所需输出的理解;您可以使用以下查询:

    SELECT GROUP_CONCAT(  "[", ID,  ";", Data,  ";",  "Customer",  ";", Alternative,  "]" ) 
    FROM test
    GROUP BY alternative
    

    【讨论】:

      【解决方案4】:

      你想计算备选方案,所以使用count(distinct):

      SELECT COUNT(DISTINCT Alternative) as NumAlternatives
      FROM $table;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 2019-12-22
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多