2016-03-19 22 views
1

我有一個包含32行的表,其中成對行包含相同的「名稱值」,但具有不同的樹莓值(分別爲「1」和「2」)。 enter image description here查找MIN值但在PHP中保留行值mysqli

我想提取一個獨特的名字和最低average_distance每一行 - 給了我16行,和我使用此查詢:

SelectFinally(); 

function SelectFinally(){ 
    $con = connectToDB(); 
    $sql = "SELECT name,MIN(average_distance),raspberry From average GROUP BY name"; 
    $result= mysqli_query($con,$sql); 
    $num_rows = mysqli_num_rows($result); 

    echo "number of rows" .$num_rows ."<br />"; 
     while($row=mysqli_fetch_assoc($result)) { 
     extract($row); 
     $name = $row['name'];  
     $distance = $row['MIN(average_distance)']; //."<br />"; 
     $raspberry = $row['raspberry'];  //."<br />"; 

echo "select inside selectFinally  name: " .$name ." distance: " .$distance ." raspberry " .$raspberry ."<br />"; 


    } 

}

這個查詢給我是average_di的最低值立場沒問題,但它攪亂了我的樹莓價值觀。例如blå_bil的樹莓值應該是「two」,因此它具有最低的average_distance值。 我似乎無法正確理解。請有人幫我解決問題嗎?

browser output

回答

1

嘗試:

SELECT a.name, a.raspberry 
FROM average a 
INNER JOIN 
(
    SELECT name, MIN(average_distance) as avg_dist 
    FROM  average 
    GROUP BY name 
) a2 ON a.name = a2.name AND a.average_distance = a2.avg_dist 

相反SELECT name,MIN(average_distance),raspberry From average GROUP BY name

+0

如果任何一對具有相同名稱的行也具有相同的average_distance,則此查詢將返回兩行。這可能會或可能不會成爲理想的行爲。 –

+0

不,它不會像只得到獨特的行 –

+0

它真的。我在下表中測試了它:'CREATE TABLE average(name VARCHAR(32),average_distance INT,raspberry VARCHAR(4)); INSERT INTO average VALUES('a',7,'one'),('a',7,'two'),('b',2,'one'),('b',4,'two ');'和兩行返回名稱爲「a」。 –

0

感謝NISHANT廟 它的工作 - 我只是需要增加TE樹莓在我的第一選擇。現在它將average_distance添加到輸出中。

$sql = "SELECT a.name, a.average_distance, a.raspberry 
from average a 
INNER JOIN 
(
select name,MIN(average_distance) AS avg_dist,raspberry 
FROM average 
GROUP BY name 
) 
a2 ON a.name=a2.name AND a.average_distance = a2.avg_dist ";