Создание
сложных наборов данных
Осталось
изменить страницу Guestbook_table.asp так, чтобы она отображала не только содержимое
поля content, но и содержимое поля sign. Давайте сделаем это и попутно изучим
построение сложных SQL-запросов и создание сложных наборов данных.
На
первый взгляд, задача, стоящая перед нами, очень проста. В самом деле, мы уже
знаем, как создать динамический текст и привязать его к полю набора данных.
Мы уже, собственно, выполнили это, когда делали страницы Guestbook.asp и Guestbook_table.asp.
Теперь же нам ничего не стоит добавить в повторяющуюся область последней страницы
новый динамический текст, привязанный к полю Sign.
Давайте
так и сделаем. И что получится в результате? А вот что.
Когда
мы откроем доработанную страницу Guestbook_table.asp в Web-обозревателе, то
увидим, что вместо слов "Положительно", "Отрицательно" или
"Нейтрально" стоят цифры от 1 до 3. Почему? Да потому, что созданное
нами поле sign имеет числовой тип, и именно число, находящееся в нем, отображается
на странице. Но мы-то хотим увидеть слова, а не цифры! Что делать?
Создать
сложный набор данных, извлекающий данные не из одной, а из нескольких таблиц.
А для этого нам придется построить сложный SQL-запрос, и сделать это нужно вручную.
Откройте
страницу Guestbook_table.asp и переключитесь на панель Bindings. Дважды
щелкните по пункту Recordset (Guestbook), представляющему созданный нами
ранее простой набор данных. (Простым набором данных называется тот, который
извлекает данные из одной таблицы.) На экране появится диалоговое окно Recordset.
Щелкните по кнопке Advanced — и это окно изменит свой вид (рис. 17.14).
Рис.
17.14. Диалоговое окно Recordset (расширенное)
В
этом диалоговом окне нам понадобятся поле ввода SQL, список Database
Items и кнопки SELECT, WHERE и ORDER BY. Многоколоночный список Variables
и все относящиеся к нему кнопки мы пока трогать не будем.
В
поле ввода SQL, как вы поняли, вводится текст SQL-запроса. В настоящее
время он таков:
SELECT
* FROM Guestbook
Выше
мы уже рассмотрели этот запрос по частям, поэтому не будем здесь повторяться.
Напомним только, что этот запрос извлекает все поля всех записей из таблицы
Guestbook.
Поскольку
мы хотим создать новый запрос SQL, то давайте сначала удалим все содержимое
поля ввода SQL. И начнем, что называется, с чистого листа.
Прежде
всего поочередно откроем ветви Tables и Guestbook и выберем пункт Content
в списке Database Items. Далее нажмем кнопку SELECT, чтобы
поместить в поле ввода SQL ключевое слово SELECT с выбранным нами полем
content. В поле ввода SQL появится такой код:
SELECT
Content FROM Guestbook
Затем
поместим текстовый курсор после слов "SELECT Content", откроем ветви
Tables и Signs и выберем пункт Desc. Опять нажмем кнопку
SELECT. Код примет следующий вид:
SELECT
Content, Desc FROM Guestbook, Signs
Как
видите, мы извлекаем данные уже из двух таблиц: поле Content из таблицы Guestbook
И ПОЛ6 Desc ИЗ Таблицы Signs.
Осталось
только добавить условие, связывающее запись таблицы Guestbook с записью таблицы
signs. Для этого добавим условие выборки записей. Выберем пункт Sign в
подветви Guestbook ветви Tables и нажмем кнопку WHERE. Код'в
поле ввода SQL опять изменится:
SELECT
Content, Desc FROM Guestbook, Signs WHERE Sign
Поставим
текстовый курсор после текста "WHERE Sign", введем знак "=",
выберем пункт ID ветви Signs в ветви Tables и опять нажмем
кнопку WHERE. Код в поле ввода SQL примет свой окончательный вид:
SELECT
Content, Desc FROM Guestbook, Signs WHERE Sign=ID
Здесь
ключевое слово WHERE обозначает условие отбора записей. А код sign=io показывает,
что в набор попадут только те записи таблицы Guestbook, значения поля sign которых
равно значению поля ID соответствующей записи таблицы signs.
Чтобы
проверить созданный SQL-запрос, нажмите кнопку Test. Если он правилен,
на экране появится диалоговое окно Text SQL Statement, содержащее записи
созданного набора данных.
Нажмите
кнопки ОК обоих диалоговых окон. И на всякий случай сохраните страницу.
Сложный набор данных, извлекающий записи из двух таблиц, нами создан. Этот набор
содержит два поля: content (содержимое записи гостевой книги), взятое из таблицы
Guestbook, и Desc (оценка сайта посетителем), взятое из таблицы signs.
Что
теперь? Может, создать новый динамический текст и привязать его к полю Desc?
Можно, конечно. Но мы поступим по-другому. Как? Сейчас увидите.