Выборка данных из массива - как?

$TM

Новичок
Имеем таблицу в базе данных

id_____поле1________поле2
1___значение11____значение12
2___значение21____значение22


Нам нужно к примеру получить из таблицы значение22

Делаем запрос

$zap = mysql_query("SELECT * FROM name_of_table WHERE поле1 = значение21,$db);
$rezult = mysql_fetch_array($zap);

теперь выводим что нам нужно

$YES = $result['поле2'];

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

$zap = mysql_query("SELECT * FROM name_of_table,$db);
$rezult = mysql_fetch_array($zap);

КАК теперь получить из этого массива значение $YES, то есть значение22 поле2 если нам известно значение21 поле1?
 

Фанат

oncle terrible
Команда форума
для начала надо проверить, что именно "загналось" в $rezult
то что хочется, или то что предусмотрено документацией.

а потом ответить себе на вопрос: постоянно используются данные из этой таблицы на одной и той же странице или на разных?
 

$TM

Новичок
Данные на одной странице, если и на других, они все равно в главную проинклюдены.

для начала надо проверить, что именно "загналось" в $rezult
то что хочется, или то что предусмотрено документацией.
А вот тут можно подробнее?
 

Фанат

oncle terrible
Команда форума
А вот тут можно подробнее?
можно.
Для того чтобы узнать, что мы получим от функции mysql_fetch_array, надо прочитать ее описание в документации.
Делается это просто: пишем в адресной строке браузера php.net/ и добавляем имя функции - получается http://php.net/mysql_fetch_array
идем на страницу, смотрим, читаем, думаем.
Данные на одной странице, если и на других, они все равно в главную проинклюдены.
А это ничего, что их на каждой странице придется заново вытаскивать? (см. http://phpfaq.ru/na_tanke )
Может, лучше, все-таки, вытаскивать только то что нужно?

Задача сохранения результата запроса в массив и последующее обращение к этому массиву - полезная и часто используемая.
Но здесь, мне кажется, не тот случай
В массив надо вытаскивать только в том случае, если нам и понадобится массив - все его строки по очереди.
А если каждый раз нужно только одно значение, то база прекрасно с этим справится - она для этого и придумана.
 

$TM

Новичок
Дело в том, что получается довольно большое количество запросов. Есть цикл, в этом цикле идет запрос к этому массиву, и каждый раз, в зависимости от поля1 нужно получить поле 2. На странице цикл может прокрутиться 2-3 раза, а может и 30-50 - как повезет. И, если на странице в этом цикле подобных обращений 8-10 штук - сами посчитайте... 1 раз запросить и 50 раз использовать или 50 раз запросить... и умножить на 8-10.


Тут еще вопрос... какое кол-во обращений к бд единовременно, к примеру, в 5 сек, можно считать нормальным для обычного хостинга, без выделенки. Чтобы не висело.
 

Vin-Diesel

Новичок
меняй логику значит.

Тут еще вопрос... какое кол-во обращений к бд единовременно, к примеру, в 5 сек, можно считать нормальным для обычного хостинга, без выделенки. Чтобы не висело.
PHP:
SELECT name FROM user WHERE id = %i;
думаю запросов 100 спокойно потянет, при 50 онлайн
PHP:
SELECT * FROM users LEFT JOIN balances USING(uid) LEFT JOIN (SELECT uid, COUNT(*) FROM messages) USING(uid) ...
а таких будет намнооого меньше.

Делай столько, сколько нужно и потом уже оптимизируй или покупай VPS
 

Фанат

oncle terrible
Команда форума
$TM
Все равно надо у базы запрашивать только те данные, которые нужны в данный момент.

Можно в цикле, но обычно без циклов можно (и нужно) обойтись.
Конкретное решение зависит от конкретной задачи.
 

Yuri

Новичок
Мне кажется вопрос остался без ответа. Просто даны рекомендации, по обходу данной ситуации. У меня аналогичная проблема. Если взять за основу массив, приведенный в самом начале, то как получить из него все записи(строки) с одинаковым значением "поле1"? Не в цикле, перебирая все строки на соответствие условиям, а запросом (фильтрацией)? Не нашёл такую функцию обработки массивов. Может кто подскажет?
 

AnrDaemon

Продвинутый новичок
Как ты сам то представляешь фильтрацию массива без перебора значений?
 

Yuri

Новичок
Примерно так: некая функция, по ключу (например "key=2" или "поле1='вася'") из данного массива выводит в другой массив все записи(строки), в которых выполняется данное условие. В некоторых языках это реализовано.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Ну вот КАК это там реализовано? Тем же самым перебором. Офигенный сюрприз, да?…
 

Yuri

Новичок
Разница БОЛЬШАЯ! Приведу пример в asp.net vb:
foundRows = table.Select(expression) - Из таблицы "table", которая есть по сути ассоциативный массив, выбираются только те строки, которые соответствуют условию "expression"(например "поле1='вася'") и помещаются в массив "foundRows". Это примерно то, что я предполагал найти в PHP. А вот каким способом работает данная функция не представляет интереса, так как она скомпилирована и работает на порядки быстрее, чем интерпретатор в цикле. К тому же это наглядно и компактно. Ну а если ничего подобного нет, то я и не в обиде на PHP - у него есть много других достоинств. Хотя может я чего и не разобрался в описаниях функций работы с массивами?
 

AnrDaemon

Продвинутый новичок
Смишной… И, да, иди читай документацию. Там всё есть. Причём на русском.
 

Фанат

oncle terrible
Команда форума
Что автору топика, что тебе в массив надо сразу выбирать только нужные значения из источника данных, а не выбирать все скопом и фильтровать потом.

Про "на порядки быстрее" - это тебе пацаны за гаражами рассказали?
 
Последнее редактирование:

Yuri

Новичок
Смишной… И, да, иди читай документацию. Там всё есть. Причём на русском.
Форум создается как раз для того, чтобы знающие ответ специалисты, помогли конкретным ответом на поставленный вопрос. А послать... может любой. Даже тот, кто не знаком с PHP.
 

Yuri

Новичок
Что автору топика, что тебе в массив надо сразу выбирать только нужные значения из источника данных, а не выбирать все скопом и фильтровать потом.

Про "на порядки быстрее" - это тебе пацаны за гаражами рассказали?
1. По какой причине кому то нужно выбирать именно из массива, а не из базы, не входит в тему обсуждения данного вопроса. Если есть ответ, как выбрать запись из массива, прошу подсказать. А вообще то зачастую возникает необходимость один раз загрузить массив, а потом его "шерстить". Но я не хотел бы здесь обсуждать эти причины.
2. Пацаны за гаражами не владеют данным вопросом. А интерпретация в таких языках, как Basic или PHP происходит значительно медленнее, чем последующее выполнение модуля в машинном коде. Разницу можно узнать в интернете. К тому же я сам в своё время занимался анализом и замером разницы. Разнится в порядках...
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
Ну, либо ты не знаешь значение слова "порядок", либо я уж не знаю, насколько кривыми должны быть руки, чтобы получить при тестировании такие цифры.

Про причины же ты должен понимать, что до тебя здесь побывали десятки тысяч людей с вопросом "где мне взять ацетилен для автогена?".
Поэтому вас надо сразу носом тыкать в в правильное решение проблемы, а не помогать вырезать гланды через жопу автогеном.
 
Последнее редактирование:

Yuri

Новичок
Ну, либо ты не знаешь значение слова "порядок", либо я уж не знаю, насколько кривыми должны быть руки, чтобы получить при тестировании такие цифры.

Про причины же ты должен понимать, что до тебя здесь побывали десятки тысяч людей с вопросом "где мне взять ацетилен для автогена?".
Поэтому вас надо сразу носом тыкать в в правильное решение проблемы, а не помогать вырезать гланды через жопу автогеном.
 

Yuri

Новичок
1. Если нет конкретных цифр, а есть согласие, что машинный код выполняется быстрее, чем интерпретация команд, то на этом и закончим. Тема ведь другая!!!
2. НИКОГДА!!! не стоит считать своё мнение непререкаемым. В любом случае есть вопрос у двоих посетителей данной темы. Если есть ответ - плз. А когда возникнет вопрос, как обойти данную ситуацию (а он не возникнет, так как ответ очевиден), вот тогда и все обходные маневры! Я бы мог пояснить в каких случаях выгодней манипулировать данными из массива, но опять таки это не входит в данную тему и к тому же займет много времени. Так можно выбрать записи из массива? (Ответ типа "читай первоисточники" не приветствуется)
 
Сверху