базовый курс

ГРУППА КУРСА

Вложенная выборка

Иногда условия выборки получаются слишком сложные и сформулировать их в одном запросе не получается. В таких ситуациях используется вложенная выборка. Ведь выборка - это таблица и из неё тоже можно сделать выборку. Она выглядит так:

SELECT * FROM (SELECT * FROM таблица WHERE условие) результат WHERE условие

Под словом результат имеется в виду название таблицы, которая является результатом внутренней выборки. Название вы придумываете сами. Оно никак не связано с именами таблиц в базе данных.

И во внешнем, и во вложенном запросе можно применять любые операторы. Пример:

+
1
2
<?php
header('Content-type: text/html; charset=utf-8');
3
4
5
6
7
8
$db=mysqli_connect('localhost', 'root', '', 'mybase');
$query="SELECT * FROM
  (SELECT * FROM users WHERE dif<10) tab1
  WHERE inform=''";
$result=mysqli_query($db, $query);
mysqli_close($db);

Запрос в этом примере работает так: из таблтцы users получаем записи, в которых dif меньнше 10. Полученному результату задаём имя tab1. Далее из этого результата выбираем записи, у которых поле inform пустое.

Использовать двойную выборку гораздо эффективнее, чем получать более общую выборку и фильтровать результат в PHP скрипте. Передача ненужных данных в скрипт - это бесполезная нагрузка на сервер. Нужно стараться в запросе выбирать только полезные данные.