我不確定你應該欺負MySQL做你想做的事情。我建議使用以下內容:
SELECT DISTINCT CONCAT(first, ' ', last) AS receiver_name
FROM names;
然後循環遍歷PHP中的這個結果集,並處理'和'的情況。
如果性能是一個問題(你會經常做這個查詢)。您將不需要對CONCAT的計算值使用DISTINCT(首先,'',last),因爲這需要使用臨時表。
調整它,添加以下指標:
ALTER TABLE names ADD INDEX (last, first);
,改變你的查詢,如下所示:
SELECT CONCAT(first, ' ', last) AS receiver_name
FROM names
GROUP BY last, first;
您可以直接從索引中得到你的價值觀,而不訴諸臨時表或文件夾。
至於循環去,像下面將工作:
<?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
}
注意此代碼假定你總是至少有2行返回。我相信你可以弄清楚如何處理只返回一個名字的情況。 :)
謝謝hobodave。你可能會談談如何做php循環?或者將我指向資源的方向。謝謝。 – Dodinas 2009-07-31 16:20:32