Ранее я проектировал веб-сайт, над которым я работаю, так, чтобы я просто запрашивал в базе данных необходимую мне информацию на странице, но после реализации функции, которая требовала каждую ячейку в каждой таблице на каждой странице (о боже)Я понял, что в целях оптимизации я должен объединить его в один большой запрос к базе данных и бросить каждую таблицу в массив, таким образом сокращая количество вызовов SQL.
Проблема заключается в том, что я хочу, чтобы этот массив включал пропущенные идентификаторы.(первичный ключ) в базе данных.Конечно, я постараюсь избежать пропущенных строк / идентификаторов, но я не буду управлять этими данными, и я хочу, чтобы система была достаточно умной, чтобы учитывать любые подобные проблемы.
Мой метод запускаетсядостаточно просто:
//Run query
$localityResult = mysql_query("SELECT id,name FROM localities");
$localityMax = mysql_fetch_array(mysql_query("SELECT max(id) FROM localities"));
$localityMax = $localityMax[0];
//Assign table to array
for ($i=1;$i<$localityMax+1;$i++)
{
$row = mysql_fetch_assoc($localityResult);
$localityData["id"][$i] = $row["id"];
$localityData["name"][$i] = $row["name"];
}
//Output
for ($i=1;$i<$localityMax+1;$i++)
{
echo $i.". ";
echo $localityData["id"][$i]." - ";
echo $localityData["name"][$i];
echo "<br />\n";
}
Два примечания:
Да, я, вероятно, должен переместить эту проверку $ localityMax в цикл PHP.
Я намеренно пропускаю первый ключ массива.
Проблема здесь в том, что пропущенный ключ в базе данных не учитывается, поэтому он в итоге выводит вот так(образец таблицы):
- 1 - ток
- 2 - Джуно
- 3 - якорная стоянка
- 4 - Нэшвилл
- 7 - Чаттануга
- 8 - Мемфис
- -
- -
Я хочу написать «Ошибка» или NULLили что-то, когда строка не найдена, затем продолжайте, не прерывая вещи.Я обнаружил, что могу проверить, меньше ли $ i $ row [$ i], чтобы увидеть, пропущена ли строка, но я не уверен, как исправить это в этот момент.
Я могу предоставитьдополнительная информация или дамп базы данных, если это необходимо.Я просто застрял на этой проблеме часами, ничто из того, что я пробовал, не работает.Буду очень признателен за вашу помощь и общую обратную связь, если я сделаю какие-либо ужасные ошибки.Спасибо!
Редактировать: Я решил это!Сначала выполните итерацию по массиву, чтобы установить значение NULL или сообщение «Ошибка».Затем в назначениях установите $ i равным $ row ["id"] сразу после вызова mysql_fetch_assoc ().Полный код выглядит так:
//Run query
$localityResult = mysql_query("SELECT id,name FROM localities");
$localityMax = mysql_fetch_array(mysql_query("SELECT max(id) FROM localities"));
$localityMax = $localityMax[0];
//Reset
for ($i=1;$i<$localityMax+1;$i++)
{
$localityData["id"][$i] = NULL;
$localityData["name"][$i] = "Error";
}
//Assign table to array
for ($i=1;$i<$localityMax+1;$i++)
{
$row = mysql_fetch_assoc($localityResult);
$i = $row["id"];
$localityData["id"][$i] = $row["id"];
$localityData["name"][$i] = $row["name"];
}
//Output
for ($i=1;$i<$localityMax+1;$i++)
{
echo $i.". ";
echo $localityData["id"][$i]." - ";
echo $localityData["name"][$i];
echo "<br />\n";
}
Спасибо за помощь всем!