2014-11-03 47 views
0

我期待这三个MySQL的查询凝结成一个单一的查询凝结MySQL查询

$qry = "SELECT DISTINCT authentication_id FROM gps_trak WHERE DATE(location_timestamp) = DATE(NOW())"; 

我使用上面的查询得到验证,然后通过循环的结果让每一个纬度和经度此人今天也越来越他/她的名字......

$qry ="SELECT latitude, longitude FROM gps_trak WHERE authentication_id = ".$authID." ORDER BY location_timestamp DESC LIMIT 8"; 

$qry = "SELECT CONCAT('forename ', 'surname') AS name FROM authentication WHERE authentication_id = ".$authID; 

你能写这为单个查询让我得到

$resultset=array("id"=>$authID,"name"=>$name,"locs"=>$locArray); 

*编辑:*可以有多个纬度和经度值在gps_trak表中的单个AUTHKEY ...

回答

0

我没有安装MySQL,但是像这样的查询:

SELECT a.authentication_id, CONCAT(a.forname, a.surname) AS name, g.latitude, g.longitude, g.location_timestamp 
FROM authentication a 
INNER JOIN gps_trak g on a.authentication_id = g.authentication_id 
WHERE DATE(g.location_timestamp) = DATE(NOW()) 
GROUP BY a.authentication_id, a.forname, a.surname, g.latitude, g.longitude, g.location_timestamp 

您不能在此溶剂中使用限制,您必须将结果按代码分组。也许像这样PHP group by和group_proxy_id。

编辑

更新了SQL。在PHP中做这样的事情(详情请看上面的链接):

<?php 
$result = mysql_unbuffered_query($qry); 
$set = array(); 
while ($record = mysql_fetch_object($result)) { 
    $set[$record->authentication_id][] = $record; 
} 
mysql_free_result($result); 
foreach ($set as $authentication_id => $records) { 
    /* do something with your name and auth key*/ 
    foreach ($records as $record) { 
    /* do something with the long and lat and you can limit it to 8 results sorting with rsort() for descending*/ 
    } 
} 
?> 
+0

我应该在问题中指定:gps_trak表中的单个authkey可以有多个纬度和经度值。 – 2014-11-03 22:39:43

+0

@JoeAustin不,这没关系我明白了。看起来好像你想限制每个认证码的长整数和8。在我的解决方案中,您必须在代码中执行此操作。我会更新我的答案。 – Alex 2014-11-04 06:43:23