|
|
|
| Подскажите плиз..
есть запрос к БД...
как мне все значения (числовые) из этого запроса получить в массив и удалить из него повторяющиеся элементы??? | |
|
|
|
|
|
|
|
для: romza
(06.03.2006 в 22:16)
| | Хм... это проще сделать средствами SQL - как выглядит ваш запрос? | |
|
|
|
|
|
|
|
для: 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);
|
В ответ запроса должен быть числовой массив.... как удалить все повторяющиеся элементы и поместить оставшееся в массив... | |
|
|
|
|
|
|
|
для: 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 - это не самый оптимальный вариант. Лучше попробовать построить запрос так, чтобы повторяющихся ответов не было изначально. Но работать будет. | |
|
|
|
|
|
|
|
для: Trianon
(07.03.2006 в 12:00)
| | А почему DISTINCT не лучший вариант и какой тогда лучше??? | |
|
|
|
|
|
|
|
для: romza
(07.03.2006 в 12:09)
| | DISTINCT довольно сильно нагружает сервер БД. Если есть возможность построить запрос так, чтобы ненужные повторы в ответе в принципе не встречались (например, делать выборку, опираясь на поля, предстваляющие первичные (уникальные) ключи - тогда применение DISTINCT окажется излишним - это стоит сделать. Но это уже зависит от, того как у Вас устроена база. | |
|
|
|
|
|
|
|
для: Trianon
(07.03.2006 в 12:15)
| | А если все элементы получить в один массив а потом функцией удалить повторяющеся элементы??? Так будет не лучше??? | |
|
|
|
|
|
|
|
для: romza
(07.03.2006 в 12:20)
| | И объясните пожалуйста запись
while(($result_row = mysql_fetch_row($data_manufacter)) != 0)
|
почему != 0 ???? | |
|
|
|
|
|
|
|
для: 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];
|
Но это уже тавтология. А тавтологии я не люблю.
А в принципе, все три варианта ничем не отличаются. Работает любая запись. | |
|
|
|
|
|
|
|
для: Trianon
(07.03.2006 в 12:50)
| | а как по поводу того что бы все таки получить все значения в один массив, а потом из него удалить повторяющиеся элементы, так будет не лучше чем с DISTINCT??? | |
|
|
|
|
|
|
|
для: romza
(07.03.2006 в 12:57)
| | Вы полагаете, что PHP-интерпретатор решит эту задачу более эффективно, чем сервер БД?
Я почему-то сомневаюсь. | |
|
|
|