2016-03-19 24 views
1

Aynı "ad-değerleri" içeren, ancak farklı ahududu değerleriyle (sırasıyla "bir" ve "iki") çift satırlı 32 satırlı bir tablom var. enter image description hereMIN değerlerini bulun ama PHP mysqli satır değerlerini koru

benzersiz ada ve en düşük average_distance içeren satırları ayıklamak istiyorum - bana 16 satır veren ve bunun için bu sorguyu kullanıyorum:

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 />"; 


    } 

}

Bu sorgu verir bana ortalama_di en düşük değerleri duruş tamam, ama bu ahududu değerlerimi bozuyor. Örneğin. blå_bil "iki" nin bir ahududu değerine sahip olmalı, dolayısıyla en düşük ortalama_distance - değerine sahip olmalıdır. Doğru anlayamıyorum. Biri bana doğru anlamama yardımcı olur mu?

browser output

cevap

1

deneyin:

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 

yerine SELECT name,MIN(average_distance),raspberry From average GROUP BY name ait

+0

Aynı adda bir çift satır aynı ortalama_distance değerine sahipse, bu sorgu her iki satırı da döndürür. Bu istenen davranış olabilir veya olmayabilir. –

+0

Hayır, grup olarak sadece benzersiz satır alır –

+0

Gerçekten yapar. Bunu aşağıdaki tabloda test ettim: “TABLO ortalama” (VARCHAR (32), ortalama_distance INT, ahududu VARCHAR (4)); Ortalama değerler ('a', 7, 'bir'), ('a', 7, 'iki'), ('b', 2, 'bir'), ('b', 4, 'iki) INSERT INSERT ') ve iki satır "a" ile geri döndü. –

0

sayesinde Nishant Matha İşe yaradı - Ben sadece benim ilk seçme te ahududu eklemek gerekiyordu. Şimdi çıktıya ortalama_distance ekler.

$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 ";