MYSQL限制按类别返回的数据

时间:2016-09-07 07:16:53

标签: mysql sql

假设我有一个像这样的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行。

2 个答案:

答案 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;);