while ループ内ですべての電話番号が表示される理由は、反復ごとに (いわば while ループが再入力されるたびに) の最後の値をエコーしているためです。そのため、すべてが一度に処理されたように見えますが、実際には一度に1 つずつ処理されます。echo "$variabele";
$variabele
echo
echo
コードを次のように変更することで、これを簡単に実証できます。
while($row = mysql_fetch_array($result))
{
$variabele = $row['leerling_nummer'] . ",";
echo "$variabele" . " | ";
}
さて、結果がそうではないことがわかります(私はあなたが期待したと思います):
0612345637,061231823,061231723, |
... しかし:
0612345637, | 061231823, | 061231723, |
あなたが信じていたことが実際に起こっていたとしたら、結果は実際には次のようになります。
0612345637, | 0612345637, 061231823, | 0612345637, 061231823, 061231723, |
すべての電話番号を 1 つの変数にまとめたい場合は、Mark Baker が既に提案したように、配列を使用するのが最善の方法です。または$variabele
、次のように、新しい電話番号をそれぞれ文字列に追加する必要があります。
// initiate $variabele as an empty string
$variabele = "";
while($row = mysql_fetch_array($result))
{
// append the new phone number to $variabele (note .= in stead of =)
$variabele .= $row['leerling_nummer'] . ",";
}
echo $variabele;
これに関する唯一の問題は、最後のコンマを削除する必要があることです。これを行う、またはこれを回避するにはさまざまな方法がありますが、Mark Baker の解決策は実際にははるかに簡単です。
最後に、列の値を簡単に連結できる便利な MySQL 関数を紹介します。これが関数GROUP_CONCAT()
です。ただし、他の列もフェッチしているため、これはおそらく現在のケースでは役に立ちません。ただし、今後の参考のために、カンマで連結したい列が 1 つだけ必要な場合は、次のようにします。
SELECT GROUP_CONCAT( leerling_nummer ) AS leerling_nummers
FROM leerlingen
WHERE klas_id='$aan_klas'
GROUP BY klas_id
データベースにクエリを実行してから$row = mysql_fetch_array($result);
すべての数値を実行すると$row['leerling_nummers']
、コンマで区切られたGROUP_CONCAT()
. つまり、PHP で行をループする必要はもうありません。MySQL はすでにすべてを 1 行にまとめています。