Ben size orada istediğiniz tam olarak ne yapıyor içine MySQL kabadayı emin değilim. Ben şu kullanarak öneririm:
SELECT DISTINCT CONCAT(first, ' ', last) AS receiver_name
FROM names;
Sonra PHP bu resultset'de döngü ve olgusunu 've' orada anlaştım.
Performans (sık sık bu sorguyu yapıyor olacak) bir endişe varsa. Geçici bir tablo kullanımını gerektiren gibi (son ',' ilk) concat hesaplanan değeri DISTINCT kullanarak değil yararlanacak.
Çimdik, aşağıdaki dizini ekleyin:
ALTER TABLE names ADD INDEX (last, first);
Aşağıdaki gibi Ve sorguyu değiştirin:
SELECT CONCAT(first, ' ', last) AS receiver_name
FROM names
GROUP BY last, first;
Geçici bir tablo veya FileSort başvurmadan endeksi doğrudan değerleri almak mümkün olacak.
Bildiğim kadarıyla döngü gider gibi, aşağıdaki gibi bir şey çalışmak:
<?php
$mysqli = new mysqli(/* connection info */);
$sql = "SELECT CONCAT(first, ' ', last) AS receiver_name "
. 'FROM names '
. 'GROUP BY last, first';
if ($result = $mysqli->query($sql)) {
$string = '';
$count = $result->num_rows;
$rows = $result->fetch_all();
for ($i = 0; $i < $count-1; $i++) {
$string .= $rows[$i][0] . ', ';
}
$string .= ' and ' . $rows[$i][0];
echo $string; // John Smith, Bob Dole, and George Bush
}
Note Bu kod her zaman en az 2 satır döndü olurdu varsayar. Ben size iade sadece tek bir ismin durumda işlemek için nasıl anlamaya eminim. :)