Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с получением массива из запроса и удаление повтор. элементов
 
 автор: romza   (06.03.2006 в 22:16)   письмо автору
 
 

Подскажите плиз..

есть запрос к БД...

как мне все значения (числовые) из этого запроса получить в массив и удалить из него повторяющиеся элементы???

   
 
 автор: cheops   (07.03.2006 в 01:10)   письмо автору
 
   для: romza   (06.03.2006 в 22:16)
 

Хм... это проще сделать средствами SQL - как выглядит ваш запрос?

   
 
 автор: romza   (07.03.2006 в 10:49)   письмо автору
 
   для: cheops   (07.03.2006 в 01:10)
 


/* Установление id страницы */
$id = $arr["id"];
/* Запрос к БД */
$query = "SELECT enum.data from tree, enum WHERE tree.id_parent = '$id' AND tree.visibility = 1 AND tree.id = enum.id_tree";
/* Отправка серверу MySQL запроса */
$data_manufacter = mysql_query($query);


В ответ запроса должен быть числовой массив.... как удалить все повторяющиеся элементы и поместить оставшееся в массив...

   
 
 автор: Trianon   (07.03.2006 в 12:00)   письмо автору
 
   для: romza   (07.03.2006 в 10:49)
 

/* Установление id страницы */ 
$id = $arr["id"]; 
/* Запрос к БД */ 
$query = "SELECT DISTINCT enum.data from tree, enum WHERE tree.id_parent = '$id' AND tree.visibility = 1 AND tree.id = enum.id_tree"; 
/* Отправка серверу MySQL запроса */ 
$data_manufacter = mysql_query($query) or die "Error on SELECT: ".mysql_error();
$result_array = array();
while(($result_row = mysql_fetch_row($data_manufacter)) != 0)
   $result_array[] = $result_row[0];


DISTINCT убирает повторяющиеся элементы из ответа.
mysql_fetch_row() получает значение каждой строки ответа.
В $result_array окажется требуемый массив чисел.

Правда, DISTINCT - это не самый оптимальный вариант. Лучше попробовать построить запрос так, чтобы повторяющихся ответов не было изначально. Но работать будет.

   
 
 автор: romza   (07.03.2006 в 12:09)   письмо автору
 
   для: Trianon   (07.03.2006 в 12:00)
 

А почему DISTINCT не лучший вариант и какой тогда лучше???

   
 
 автор: Trianon   (07.03.2006 в 12:15)   письмо автору
 
   для: romza   (07.03.2006 в 12:09)
 

DISTINCT довольно сильно нагружает сервер БД. Если есть возможность построить запрос так, чтобы ненужные повторы в ответе в принципе не встречались (например, делать выборку, опираясь на поля, предстваляющие первичные (уникальные) ключи - тогда применение DISTINCT окажется излишним - это стоит сделать. Но это уже зависит от, того как у Вас устроена база.

   
 
 автор: romza   (07.03.2006 в 12:20)   письмо автору
 
   для: Trianon   (07.03.2006 в 12:15)
 

А если все элементы получить в один массив а потом функцией удалить повторяющеся элементы??? Так будет не лучше???

   
 
 автор: romza   (07.03.2006 в 12:22)   письмо автору
 
   для: romza   (07.03.2006 в 12:20)
 

И объясните пожалуйста запись


while(($result_row = mysql_fetch_row($data_manufacter)) != 0)


почему != 0 ????

   
 
 автор: Trianon   (07.03.2006 в 12:50)   письмо автору
 
   для: romza   (07.03.2006 в 12:22)
 

Из http://www.php.net/manual/ru/function.mysql-fetch-row.php :
mysql_fetch_row() обрабатывает один ряд результата, на который ссылается переданный указатель. Ряд возвращается в массиве. Каждая колонка распологается в следующей ячейке массива. Массив начинается с индекса 0.
Последующие вызовы функции mysql_fetch_row() вернут следующие ряды или FALSE, если рядов не осталось.


Другими словами, эта функция от вызова к вызову возвращает ряд за рядом. Когда ряды кончились - вернет FALSE.

Конечно, можно написать короче:
while($result_row = mysql_fetch_row($data_manufacter))
   $result_array[] = $result_row[0]; 

Но мне такая запись представляется недостаточно четко читаемой. Из-за того, что чисто визуально воспринимается как сравнение $result_row и mysql_fetch_row(...). Можно написать и так:
while(($result_row = mysql_fetch_row($data_manufacter)) != FALSE)
   $result_array[] = $result_row[0];

Но это уже тавтология. А тавтологии я не люблю.
А в принципе, все три варианта ничем не отличаются. Работает любая запись.

   
 
 автор: romza   (07.03.2006 в 12:57)   письмо автору
 
   для: Trianon   (07.03.2006 в 12:50)
 

а как по поводу того что бы все таки получить все значения в один массив, а потом из него удалить повторяющиеся элементы, так будет не лучше чем с DISTINCT???

   
 
 автор: Trianon   (07.03.2006 в 13:02)   письмо автору
 
   для: romza   (07.03.2006 в 12:57)
 

Вы полагаете, что PHP-интерпретатор решит эту задачу более эффективно, чем сервер БД?
Я почему-то сомневаюсь.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования