Sql 如何对多个列使用Distinct?

Sql 如何对多个列使用Distinct?,sql,Sql,我希望分区和位置都不同,如果不需要单独的列,则可以执行以下操作: $q=mysql_query("SELECT DISTINCT zone, location FROM service_info WHERE city='".$_REQUEST['city']."' and sr_no=1"); 如果您只想检索一个不同区域的列表和一个不同位置的列表,这两个区域和位置都符合条件,那么您可能应该为每个区域发出两个单独的查询,因为这两个列表彼此不相关,因此在一个查询中检索它们是没有意义的。似乎您只是想

我希望分区和位置都不同,如果不需要单独的列,则可以执行以下操作:

$q=mysql_query("SELECT DISTINCT zone, location FROM service_info WHERE city='".$_REQUEST['city']."' and sr_no=1");

如果您只想检索一个不同区域的列表和一个不同位置的列表,这两个区域和位置都符合条件,那么您可能应该为每个区域发出两个单独的查询,因为这两个列表彼此不相关,因此在一个查询中检索它们是没有意义的。似乎您只是想并排显示这两个列表,这应该在表示层中完成,而不是在数据库中

作为另一种选择,你可能会考虑这样的事情:

SELECT
    zone
FROM 
    service_info 
WHERE 
    city='".$_REQUEST['city']."' and sr_no=1
UNION
SELECT
    location 
FROM 
    service_info
WHERE
    city='".$_REQUEST['city']."' and sr_no=1
SELECT
  (
    SELECT GROUP_CONCAT(DISTINCT zone)
    FROM service_info
    WHERE city='".$_REQUEST['city']."' AND sr_no=1
  ) AS zones
,
  (
    SELECT GROUP_CONCAT(DISTINCT location)
    FROM service_info
    WHERE city='".$_REQUEST['city']."' AND sr_no=1
  ) AS locations
上面的查询将返回一行两列,每列包含逗号分隔的项目列表。如果希望列表改为列,可以显式指定换行符符号作为分隔符,如下所示:

SELECT
    zone
FROM 
    service_info 
WHERE 
    city='".$_REQUEST['city']."' and sr_no=1
UNION
SELECT
    location 
FROM 
    service_info
WHERE
    city='".$_REQUEST['city']."' and sr_no=1
SELECT
  (
    SELECT GROUP_CONCAT(DISTINCT zone)
    FROM service_info
    WHERE city='".$_REQUEST['city']."' AND sr_no=1
  ) AS zones
,
  (
    SELECT GROUP_CONCAT(DISTINCT location)
    FROM service_info
    WHERE city='".$_REQUEST['city']."' AND sr_no=1
  ) AS locations
GROUP_CONCAT(不同区域分隔符“
”)
您可以尝试这个解决方案:您需要在同一列中还是在两个不同的列中使用
区域
位置