На главную Статьи Функции

Усложняем запросы к базе данных MySQL (оператор SELECT)





При написании сайта может возникнуть задача выборки данных из двух таблиц. Рассмотрим данную задачу на примере двух таблиц: первая – категории статей,  вторая – названия статей (этого минимума хватит). Итак, создадим в базе данных две таблицы:

  1. categoryes с двумя столбцами – id(SMALLINT, UNIQE – Уникальный идентификатор, AUTO_INCREMENT), cat_name(VARCHAR, length:255) – название категории. Думаю смысл записей в скобках понятен.
  2. articles с тремя столбцами – id(как в categoryes), cat_id (связь статей с категориями), name –название статьи (VARCHAR, length:255).

Перейдем к задаче. На странице нужно вывести название всех статей, а в скобках после названия статьи указать название ее категории.
Решить ее можно двумя путями:

  1. Два раза использовать оператор SELECT для двух таблиц:

$q1=mysql_query(”SELECT * FROM articles”)
while ($articles=mysql_fetch_assoc($q1)) {
echo $articles[‘name’];
$q2=mysql_query(”SELECT * FROM categories WHERE id=’”.$arfticles[‘cat_id’].”’”);
$cat_name=mysql_fetch_assoc($q2);
echo “ (”.$cat_name[‘cat_name’].”)<br />”;
}
Такой скрипт выведет строки, в которых после названия статей в скобках стоит название категории. В принципе можно оставить и так, однако иногда запросов становится намного больше, и разбираться в работе программы уже гораздо сложнее.

  1. Выбрать одним запросом названия статей и категорий:

$q=mysql_query(”SELECT a.id, a.name, a.cat_id, c.id, c.cat_name FROM articles a, categoryes c WHERE a.cat_id=c.id)”;
while ($articles=mysql_fetch_assoc($q)) {
echo $articles[‘name’].”(”.$articles[‘cat_name’].”)”;
}

Здесь нужно сделать паузу… что значат буквы a и c перед именами ячеек? Эти буквы обозначают так называемые псевдонимы полей, которые определяются через пробел после названия таблицы в блоке FROM. Т.е. если подробнее, то мы сказали на языке SQL следующее: Выбрать ячейки a.id, a.name, a.cat_id, c. id, c.cat_name из таблиц  articles, categoryes которым соответствуют псевдонимы a и c.

Если выполнить данный запрос в phpMyAdmin получится следующее:


id (идентификатор статьи)

name (название статьи)

cat_id (идентификатор категории из таблицы articles)

id (идентификатор категории)

name (название категории)

1

Взаимодействие PHP и MySQL

1

1

PHP

2

Переменные PHP

1

1

PHP

6

Изображения с прозрачным фоном

7

7

Дизайн

Стоит оговориться что если названия ячеек таблиц совпадают (например name используется как название статьи и название категории), то вывод можно делать следующим образом:

$q=mysql_query("SELECT a.id, a.name as aname, a.cat_id, c.id, c.name as cname FROM articles a, articles_cat c WHERE a.cat_id=c.id");

while ($articles=mysql_fetch_assoc($q)) {
echo $articles['aname']."(".$articles['cname'].")<br />";


т.е. кроме псевдонимов таблиц можно указать псевдонимы ячеек, при помощи ключевого слова AS
Ну а дальше совершенствовать свои запросы, упрощать их и делать все, на что хватит фантазии…



© 2010-2019 При использовании материалов ссылка на сайт www.webchaynik.ru обязательна

обратная связь