我不确定你应该欺负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