Каков наиболее эффективный способ запроса и сортировки списка идентификаторов, разделенных точкой с запятой, в соответствии с их связанными строками из другой таблицы? - PullRequest
0 голосов
/ 20 июля 2010

У меня есть 2 таблицы в базе данных mysql: пользователи и домашние животные .В таблице пользователей есть поле, которое содержит разделенный точкой с запятой список домашних животных, которые есть у пользователя (pet_ids = 1; 2; 3; 4;).Эти идентификаторы соответствуют уникальным идентификаторам (ключам) в таблице питомцев, которые содержат имя питомца (1 = рекс, 2 = голди, 3 = писк, 4 = пузырь).

Я хочу представить список этихдомашние животные на странице PHP в алфавитном порядке, но сохраняют идентификатор имени домашнего животного, чтобы передать его в качестве переменной на другую страницу при нажатии на имя домашнего животного.

Какой самый эффективный способ добиться этого.

Пока что список, который я создаю, не в алфавитном порядке, а для того, чтобы домашние животные были добавлены -

Функции длязапрос к базе данных

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>");     
}

Какой самый эффективный способ получить алфавитный список - мне нужно сохранить структуру базы данныхто же самое.

1 Ответ

2 голосов
/ 20 июля 2010

Если вам нужно работать с разделенными списками для набора идентификаторов, а не для надлежащим образом нормализованной таблицы, по крайней мере используйте один запрос базы данных для возврата набора имен домашних животных, а не отдельные запросы для каждого отдельного домашнего животного.

$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);

И не используйте @ для подавления ошибок, ловите их правильно

PS Зачем вам нужно urldecode () имена питомцев?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...