区切られた文字列に基づいて mysql クエリの結果をソートするエレガントなソリューションを見つけようとするのは困難です。以下で詳しく説明します
個々のユーザーがリストから人を追加/削除できる連絡先のデータベースを作成しています。ユーザーが新しい連絡先を追加すると、追加された連絡先 ID を区切られた文字列に追加し、そのデータをそのユーザー (連絡先という名前) に関連付けられたデータベース列に格納します。
$userID = ?? //YOUR ID
$contactID = ?? //WHATEVER THE ADDED USER ID IS
$confirm = 0 //has the user been confirmed
$sql = "SELECT contacts FROM user WHERE id = '$userID'";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
$contact = $row['contacts'];
$contact .= '|'.$contactID.':'.$confirm;
$update = mysql_query("UPDATE user SET contacts = '$contact' WHERE id = '$userID'");
//contact column data might be: |10:0|18:0|36:0|5:0
ユーザーが連絡先を検索すると、連絡先列からデータを取得し、文字列を分解/分割して、個々のユーザー名を返します。
$userID = ?? //YOUR ID
$sql = "SELECT contacts FROM user WHERE id = '$userID'";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
$contacts = explode("|", $row['contacts']);
foreach($contacts as $item)
{
list($contactID,$confirm) = split(":", $item);
$sql = "SELECT name FROM ".user." WHERE id = '$contactID'";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
echo($row['name'].'<BR>');
}
これは確かにすべての名前を返しますが、区切り文字列の順序で返します。名前をアルファベット順に並べ替えるエレガントな方法が見つからないようです。
連絡先リストを区切り文字列で保存するべきではありませんか? これをどのように解決しますか?