Основной вопрос группировки массива PHP MySQL

Быстрый вопрос, который, как я думаю, имеет очень простое решение для тех, кто имеет что-то выше самого элементарного знания PHP / MySQL, как и я.

У меня есть список городов в разных штатах, хранящихся в базе данных с городом, состоянием и некоторыми другими переменными. Прямо сейчас их тянет как список, отсортированный по названию города:

  • Анкоридж, AK
  • Балтимор, MD
  • Чикаго, Иллинойс и т.д.

Сначала я хочу иметь возможность группировать по штату, а затем перечислять все города, у которых есть это значение. Таким образом, это будет выглядеть так:

Аляска

  • анкеровка
  • Джуно

Калифорния

  • Лос-Анджелес
  • Сан Диего
  • Сан-Франциско
  • и т.д.

Я знаю, что мне нужно сделать что-то вроде foreach и искать в Интернете, но не нашел примера, на котором я могу работать.

Вот что мне нужно сделать для основного списка:

$list = mysql_query("SELECT id, alphaname, state FROM regional ORDER BY alphaname",$db); while ($thearray = mysql_fetch_array($list)) { echo "<li><a href='info.html?id=$thearray[id]'>$thearray[alphaname], $thearray[state]</a></li>"; } 

Единственный реальный способ, которым я знаю, как это сделать, – это запустить запрос для каждого состояния, которое было бы больно и совершенно глупо …

Спасибо за любую помощь!

Обновление – решено. Я пошел с подходами rockacola, хотя и работал.

Попробуй это..

Вся страна с государством, по предварительному заказу сначала в городе:

 SELECT id, alphaname, state FROM regional ORDER BY state ASC, alphaname ASC 

Организуйте свой набор данных в 2-мерный массив:

 $states = array(); while($thearray = mysql_fetch_array($list)) { $states[$thearray[state]][$thearray[id]] = $thearray[alphaname]; } 

Теперь содержимое ваших $states должно выглядеть примерно так:

 Array ( [AK] => Array ( [id_1] = Anchorage [id_2] = Juneau ) [CA] => Array ( [id_3] = Los Angeles [id_4] = San Diego [id_5] = San Francisco ) ) 

Создайте свою HTML-презентацию:

ПРИМЕЧАНИЕ. Добавьте якорь, чтобы отразить предложенный вопрос.

 foreach($states as $state_name => $cities) { echo '<h3>'.$state_name.'</h3>'; echo '<ul>'; foreach($cities as $id => $city_name) { echo '<li><a href="info.html?id='.$id.'">'.$city_name.'</a></li>'; } echo '</ul>'; } 

Обновите SQL-запрос для использования:

 ORDER BY state, alphaname 

Это приведет к возврату результатов вашей базы данных:

 state city ------------------ AK Anchorage AK Juneau 

… предполагая использование SELECT state, alphaname AS city для целей примера.

Презентация должна обрабатываться в PHP:

 //Please excuse my hideous attempt at PHP. Better to think of it as Psuedo code while ($thearray = mysql_fetch_array($list)) { echo $thearray[state] echo "<li><a href='info.html?id=$thearray[id]'>$thearray[alphaname]</a></li>"; } 

… или вы можете посмотреть на сообщение ig .

Сортировка всех строк по состоянию. Затем перемещайте все строки по порядку. В первой строке и в любой строке, которая имеет другое состояние, чем предыдущая строка, выведите имя состояния перед выводом имени города.

SQL не вернет более двухмерных данных. Вы хотите получить какую-то сводную колонку. Ответ на вашу проблему – получить все строки с помощью:

 SELECT * FROM regional ORDER BY state; 

Затем сортируйте и группируйте, используя PHP (или ваш язык выбора), но не SQL.