假设我有一个像这样的MYSQL表:
create table service
(
id int(12) not null auto_increment,
name varchar(300) not null,
address varchar(300),
suburb varchar(300),
postcode varchar(10),
phone varchar(14),
latitude float(25,20),
longitude float(25,20),
description varchar(300),
service_type varchar(300) not null,
primary key (id)
);
此表包含各种服务。当我从这个列表中检索服务时,它是按位置完成的,因此我无法保证将返回哪些服务。该位置大约3公里半径。为了说明网页上的格式,我们正在显示结果,我们将结果限制为5行。我遇到过一个问题,由于表中的数据,返回的行都恰好是相同的service_type。返回5个碰巧在该区域内的健身房而忽略其他服务对我来说是不利的。有没有办法将返回的结果限制为任何特定service_type的最多一个或两个?
以下是json从php返回的数组中表的一些输出:
[Array[10], Array[10], Array[10], Array[10], Array[10]]
0:Array[10]
0:"7780"
1:"Ardrie Park Tennis Club"
2:"64 Ardrie Street "
3:"EAST MALVERN"
4:"3145"
5:""
6:"-37.87911224365234400000"
7:"145.05429077148438000000"
8:""
9:"Sports"
length:10
__proto__:Array[0]
1: Array[10]
0: "7783"
1:"Easterverne Tennis Club"
2:"91 Manning Road "
3:"EAST MALVERN"
4:"3145"
5: ""
6:"-37.87286758422851600000"
7:
"145.05358886718750000000"
8:""
9:"Sports"
length:10
__proto__ : Array[0]
2:Array[10]
0:"7791"
1:"Penpraze Park"
2:"10 Victoria Road South "
3:"EAST MALVERN"
4:"3145"
5:""
6:"-37.87079620361328000000"
7:"145.03793334960938000000"
8:""
9 :"Sports"
length:10
__proto__:
Array[0]
3:Array[10]
4:Array[10]
length:5
__proto__:Array[0]
以下是生成它的查询:
$query = "SELECT s.id,s.name,s.address,s.suburb,s.postcode,s.phone,s.latitude,s.longitude,s.description,s.service_type "
. "FROM service s, emotion_service es, emotion e, service_type st, active a, social so "
. "where s.latitude < '$latLng[0]' and s.latitude > '$latLng[1]' "
. "and s.longitude < '$latLng[2]' and s.longitude > '$latLng[3]' "
. "and e.name = 'sad' "
. "and e.id = es.emotion_id "
. "and es.service_id = s.id "
. "and s.id = st.service_id "
. "and st.active_id = a.id "
. "and st.social_id = so.id "
. "and a.name = '$active' "
. "and so.name = '$social' "
//. "GROUP BY s.service_type ";
. "LIMIT 5";
另外,group by会删除由于某种原因返回的大部分结果。它没有将每个服务类型限制为一行,它只返回1行。
答案 0 :(得分:0)
要为每个service_type只获得一个结果,您可以使用&#34; GROUP BY&#34;:
SELECT service_type, MAX(ID)
FROM table
WHERE latitude = xxxx and longitude = xxxx
GROUP BY service_type
答案 1 :(得分:0)
不是很清楚,但如果我理解正确,可以随机化结果集,同样可以用作偏移量
$offsetRes = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `yourtable` ");
$ offset_row = mysql_fetch_object($ offsetRes);
$ offsetVal = $ offset_row-&gt; offset;
$ result = mysql_query(&#34; SELECT * FROM yourtable
LIMIT $ offset,1&#34;);