Быстрый вопрос, который, как я думаю, имеет очень простое решение для тех, кто имеет что-то выше самого элементарного знания PHP / MySQL, как и я.
У меня есть список городов в разных штатах, хранящихся в базе данных с городом, состоянием и некоторыми другими переменными. Прямо сейчас их тянет как список, отсортированный по названию города:
Сначала я хочу иметь возможность группировать по штату, а затем перечислять все города, у которых есть это значение. Таким образом, это будет выглядеть так:
Аляска
Калифорния
Я знаю, что мне нужно сделать что-то вроде 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.