-2

我是 php 和 MySql 的新手,正在尝试编写一个 php 脚本来查询 MySQL 表。我花了几个小时搜索stackoverflow,但不太了解类似问题的一些答案,例如如何从表中选择唯一值?MYSQL + 选择 2 列 - 1 是唯一的

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

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

我有到数据库的 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
4

2 回答 2

1

如果我正确理解您的问题,您需要按位置和地址进行分组:

SELECT location, address FROM table GROUP BY location, address

或者您可以使用 DISTINCT:

SELECT DISTINCT location, address FROM table
于 2013-04-17T11:26:10.523 回答
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 中名称的另一个类似的派生故事。

于 2013-04-17T09:13:17.587 回答