如何从MySQL表中选择列1和列2值唯一的所有数据

时间:2013-04-17 09:09:29

标签: php mysql

我是php和MySql的新手,我正在尝试编写一个php脚本来查询MySQL表。 我花了几个小时搜索stackoverflow,但不太了解类似问题的一些答案,如How to select unique values from a table?MYSQL + Select 2 columns - 1 being Unique

我有一个带有“位置”列和“地址”列的表格以及其他一些列,其中包含有关该位置的其他信息等。该位置是例如商店的名称。地址栏保存该商店的街道地址。

商店有时在不同的地址有多个商店,我需要有一个查询,显示表格中的所有数据,如果地址是唯一的,该地点只会多次显示。

我有数据库的php连接和数据库的选择,但是需要MySql查询的帮助。

我在该位置使用了GROUP BY功能,但所有地址都放在同一位置。

这是我使用过的,但只显示了唯一的位置。

<?php
mysql_connect("localhost","username","password");
mysql_select_db("dbname");
$sql=mysql_query("SELECT * from table GROUP BY location");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>

如果地址是唯一的,如何进行查询以允许多次显示位置?

提前感谢你..

不确定如何发布表结构,但这是我可以从myphpadmin

获得的
**Column**      **Type**        **NULL**        **Comments**
_id              int(11)           No       auto_increment 
location         text              No       Shop Name 
address          text              No       Shop Address 
suburb           varchar(30)       No        
state            varchar(3)        No        
longitude        float             No       longitude 
latitude         float             No       latitude 
date             date              No        
time             time              No        

我所追求的是具有唯一地址的所有地点。某些位置将具有相同的名称和相同的地址,但某些位置将具有相同的名称,但具有不同的地址。 例如..如果表格看起来像

**Location**     **Address**
Target           Pacific Fair
Kmart            Pacific Fair
Kmart            Robina
Kmart            Southport
Target           Pacific Fair
Target           Tweed City
Kmart            Pacific Fair
Best and Less    Pacific Fair

我希望结果显示

**Location**     **Address**
Target           Pacific Fair
Target           Tweed City
Kmart            Pacific Fair
Kmart            Robina
Kmart            Southport
Best and Less    Pacific Fair

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你需要按位置和地址分组:

SELECT location, address FROM table GROUP BY location, address

或者您可以使用DISTINCT:

SELECT DISTINCT location, address FROM table

答案 1 :(得分:0)

我假设您的案例可能比您在数据中显示的案件多。您可以在col1中使用NULL,您可以将名称仅发生在col1中或仅发生在col2中等。

SELECT a.name, c1.`count`, c2.`count`
FROM (SELECT col1 AS name FROM `Table` UNION SELECT col2 FROM `Table`) a
LEFT JOIN (SELECT col1, COUNT(*) AS `count` FROM `Table` GROUP BY col1) c1 
ON a.name = c1.col1
LEFT JOIN (SELECT col2, COUNT(*) AS `count` FROM `Table` GROUP BY col2) c2 
ON a.name = c2.col2;

说明: 派生表a是出现在任一列中的所有名称的并集。然后再创建两个派生表,每个表都有一个来自col1的每个名称,以及它出现次数的计数,然后是另一个类似于col2中名称的派生故事。