Оптимизация SQL запроса
Четверг, 29 Сен 2011 12:50
Уровень интеграции между PHP и MySQL позволяет легко создавать динамические веб-приложения в сжатые сроки. Всего за несколько минут можно написать код для получения информации из базы данных MySQL для использования в веб-приложении. Взаимодействие с базами данных MySQL является одним из основных требований для построения мощных и полезных веб-приложений. При использовании MySQL баз данных для реализации модели данных в веб-приложениях встречается одна ошибка, которую часто допускают начинающие разработчики.
В данном примере мы создадим очень простое веб-приложение, которое почти не делает ничего полезного. Тем не менее, данное веб-приложение является хорошим способом продемонстрировать довольно распространенную ошибку и предоставляет пример простого решения. Приложение, которое мы напишем, будет отображать список имен людей и выводить их любимые цвета. В примере не будут рассмотрены все этапы создания приложения, такие как добавление новых людей или назначение цветов, вы должны сделать это самостоятельно.
Создание таблиц MySQL
Нам понадобится две MySQL таблицы, одна будет содержать список людей, другая цвета. С помощью следующих SQL-запросов будут созданы таблицы с нужной структурой.
CREATE TABLE `person` (
`ID` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 30 ) NOT NULL
);
CREATE TABLE `colour` (
`ID` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`personID` INT( 5 ) NOT NULL ,
`colour` VARCHAR( 30 ) NOT NULL
);
При выполнении вышеприведенных SQL-запросов, вы получите две таблицы, необходимые для работы веб-приложения. Перед тем как двинуться дальше, заполним таблицы данными. Также выполните следующие запросы.
INSERT INTO `person` (`ID`, `name`) VALUES (NULL, ‘Michael’), (NULL, ‘Alyshea’);
INSERT INTO `person` (`ID`, `name`) VALUES (NULL, ‘Frank’), (NULL, ‘Jim’);
INSERT INTO `colour` (`ID`, `personID`, `colour`) VALUES (NULL, ‘1’, ‘Blue’), (NULL, ‘1’, ‘Black’);
INSERT INTO `colour` (`ID`, `personID`, `colour`) VALUES (NULL, ‘2’, ‘Pink’), (NULL, ‘3’, ‘Green’);
INSERT INTO `colour` (`ID`, `personID`, `colour`) VALUES (NULL, ‘3’, ‘Brown’), (NULL, ‘4’, ‘Yellow’);
Что обычно делают неправильно
Для начала я покажу, как можно неправильно выполнить эту операцию. Многие люди так делают, и есть несколько причин, по которым стоит этого избегать. Давайте сразу перейдем к PHP-коду.
// Запрос на получение всех записей о людях
$queryPeople = mysql_query(“SELECT * FROM person”) or die(mysql_error());
// Обработать в цикле каждую запись
while($person = mysql_fetch_array($queryPeople))
{
// Вывести имя человека
echo ”
” . $person[‘name’] . “
“;
// Запрос любимых цветов данного человека
$queryColours = mysql_query(“SELECT * FROM colour WHERE personID = ‘” . $person[‘ID’] . “‘”);
// Обработать в цикле каждый цвет
while($colour = mysql_fetch_array($queryColours))
{
// Отобразить цвет
echo $colour[‘colour’] . “
”;
}
}
1 2