Поиск и сортировка данных из несортированной таблицы MySQL / многомерного массива в PHP

#php #mysql

Вопрос:

У меня есть стол, который выглядит так:

ID app_id field_id ценность
ХХХ ууу 9 имя
ХХХ ууу 2 фамилия

Столбец «Значение» содержит такие данные, как Имя, Фамилия, Адрес, адрес электронной почты и так далее. Единственный способ определить, какое значение находится в столбце «значение», — это «field_id». Между тем «app_id» действует как уникальный идентификатор пользователя / идентификатор пользователя.
(Таблица предоставляется плагином WordPress, поэтому, как бы ужасно это ни было, я не могу это изменить.)

Это означает, что для получения имени и фамилии пользователя мне пришлось бы искать 2 строки с одним и тем же идентификатором приложения, а затем получить столбец значения, где field_id равен 9 для имени и 2 для фамилии.

Итак, я хочу распечатать что-то вроде: (псевдокод)

 for ($app_id) {  if (app_id == $app_id amp;amp; field_id = 9) {  $first_name = value  }  if (app_id == $app_id amp;amp; field_id = 2) {  $last_name = value  } echo $first_name . $last_name; }  

Пока у меня есть только следующий код, который помещает все данные в многомерный массив:

 $mysqli = new mysqli("localhost","dbane","dbpass","dbuser"); $mysqli-gt;set_charset("utf8mb4"); $fields = $mysqli -gt; query("SELECT * FROM name_of_table"); $results = $fields-gt;fetch_all(); foreach ($results as $result) {  foreach ($result as $key =gt; $value) {  /* Lost what to do here */  } }  

Как бы я мог получить имя и фамилию каждого пользователя и соединить их вместе?

База данных содержит около 20 000 строк, поэтому использование нескольких запросов mysqli_ не является вариантом, так как время загрузки составляет 10 мин. и создает ужасную нагрузку на сервер.

Комментарии:

1. Маленький момент Все таблицы MySQL несортированы

2. Ну Шаг 1 ) SELECT * FROM name_of_table WHERE app_id = 'yyy'

3.Затем Шаг 2) SELECT * FROM name_of_table WHERE app_id = 'yyy' and (field_id = 9 OR field_id = 2) Теперь вы обрабатываете только 2 строки, которые вам действительно нужны, вместо всей таблицы

4. PS Если это было натяжкой, вам действительно нужно остановиться и потратить несколько часов на изучение некоторых ОСНОВНЫХ руководств по SQL

5. Спасибо вам за быстрый ответ. Это совсем не было натяжкой, у меня даже есть точно такое решение. Однако мне нужно отсортировать около 20 000 строк данных, и мне нужно не только получить 2 значения, но и 8. Это означает, что 8 из этих вызовов проходят через всю таблицу базы данных

Ответ №1:

Я решил эту проблему, выполнив следующее, с помощью RiggsFolly:

 for ($i = $count; $i gt;= ($count - 1000); $i--) {  $data = $mysqli -gt; query("SELECT * FROM table_name WHERE app_id = $i AND field_id IN (2,9,15,5,10,11,6,3)");  $names = $data-gt;fetch_all();  foreach ($names as list($a, $b, $c, $d)) {  switch ($c)  case 9:  $first_name = $d;  break:  case 15:  $last_name = $d;  break;  }  }