在试图找出一个优雅的解决方案来排序基于分隔字符串的mysql查询结果时遇到困难。我在下面更详细地解释对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>');
}
这的确不会返回所有的名字,但它在分隔字符串的顺序返回它们。我似乎找不到按字母顺序排序的优雅方法。
我不应该将联系人列表存储在分隔字符串中吗?你会如何解决这个问题?
您应该将联系人存储在称为“联系人”的新表格中。这个表的每一行都应该有用户ID,所以你可以使用'SELECT * FROM''contacts'WHERE \'user_id''<用户ID here>;' – 2012-04-09 20:03:59
正确地规范数据库,排序应该很容易。 – Zoredache 2012-04-09 20:04:18
这种问题恰恰就是为什么您不应将条目存储在数据库中作为逗号分隔的字符串。归!归!归! – 2012-04-09 20:26:19