php - 根据另一个表中的关联字符串查询和排序以分号分隔的 id 列表的最有效方法是什么?

标签 php mysql database sorting

我的 mysql 数据库中有 2 个表:userspets。在 users 表中,有一个字段包含用户拥有的宠物的分号分隔列表 (pet_ids = 1;2;3;4;)。这些 id 对应于 pets 表中包含宠物名称的唯一 id(键)(1 = rex、2 = goldie、3 = squeak、4 = bubble)。

我想在 PHP 页面上按字母顺序显示这些宠物的列表,但保留宠物名称的 id,以便在单击宠物名称时作为变量传递到另一个页面。

实现这一目标的最有效方法是什么。

到目前为止,我生成的列表不是按字母顺序排列的,而是按照添加宠物的顺序排列的 -

查询数据库的函数

function getUserPets($user_id) {    
  $query= "SELECT pet_ids FROM users WHERE id='$user_id'";  
  $result = @mysql_query ($query);
  if (!$result) {
      die('Invalid query: ' . mysql_error());
  }
  while($row = mysql_fetch_array($result)) {
          $the_pets = $row['pet_ids'];
  }
  return $the_pets; //1;2;3;4;
} 
function getPetName($id) {
$name = "";
    $query= "SELECT name FROM pets WHERE id='" . $id . "' ";
$result = @mysql_query ($query);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}
while($row = mysql_fetch_array($result)) {
    $name = $row['name'];
}
return urldecode($name);
}

生成列表的代码...

$petstring = getUserPets($userid);
$petsarray = explode(";", $petstring);
foreach ($petsarray as $pet_id) {
    echo("<li><h4><a href=\"pet.php?id=$pet_id\">" . writeListPetName($pet_id) . "</a></h4></li>");     
}

获取按字母顺序排列的列表的最有效方法是什么 - 我需要保持数据库结构相同。

最佳答案

如果您必须使用一组 id 的单独列表,而不是正确规范化的表,那么至少使用单个数据库查询来返回一组宠物名称,而不是为每个单独的宠物单独查询。

$petsarray = implode(',',explode(";", $petstring)); 

function getPetName($ids) { 
   $name = ""; 
   $query= "SELECT id, name FROM pets WHERE id IN (" . $ids . ") ORDER BY name"; 
   $result = mysql_query ($query); 
   if (!$result) { 
      die('Invalid query: ' . mysql_error()); 
   } 
   while($row = mysql_fetch_array($result)) { 
      $names[$row['id']] = urldecode($row['name']); 
   } 
   return $names; 
} 

var_dump($names);

并且不要使用@来抑制错误,而是正确地捕获错误

附注为什么需要对宠物名进行 urldecode()?

关于php - 根据另一个表中的关联字符串查询和排序以分号分隔的 id 列表的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289441/

相关文章:

php - 如果用户没有启用 javascript,则重新加载页面

php - 如何将Word文档中的问题和答案批量上传到MYSQL数据库?

mysql - mysql用户权限会影响性能吗?

database - 如何使用 desc 顺序创建索引组织表

sql - 计算切换间隔 SQL Server 的秒数

php - SilverStripe - 当另一个管理模型获得新条目时更新一个管理模型

php - VSCode调试器跳过断点

java - 如何自动增加MySQL表中的列?

php - 显示特定自定义帖子类型的所有帖子及其帖子元

mysql - 合并来自同一来源的两个计数查询