Подробности к шагу 12
Для экспериментов с операторами и функциями mysql удобно создать таблицу-пустышку по аналогии с oracle-иным решением (я думаю, Вы уже создали какую-нибудь базу для экспериментов, ну, например, mysqladmin create test):
connect test;
create table dual (id char(1));
insert into dual values('X');
|
Итак, сокращенный список операторов и функций MySQL. (Здесь описаны лишь некоторые функции, отобранные в основном по критерию отличности от SQL-стандарта.)
Условия WHERE:
- [NOT] BETWEEN .. AND - диапазон (как в стандарте - просто напоминаю).
- [NOT] IN (...) - список значений (то же замечание).
- Стандартный оператор [NOT] LIKE строка_с_подстановками, где подстановки могут быть символом '%' (любое число символов) и/или '_' (одиночный символ), например, поле field в таблице test некоторой записи содержит такой текст: "PHP - рулез форева!"; тогда добраться до него можно так:
select * from test where field like '%рул_з%'
|
(предполагается, что мы забыли, что именно является рулезом и как вообще пишется рулез: "рулЕз" или "рУлиз" ;)
- [NOT] REGEXP/RLIKE - (а вот это интересно!) использование регулярных выражений (!), например, если таблица из предыдущего примера хранит записи с утверждениями для всех версий PHP, а мы согласны с рулезностью только 3-й и 4-й версий, то условие WHERE можно записать так:
- LIMIT [начало,] конец_выборки - ограничение диапазона выборки.
По моему скромному разумению, без этой фразы mysql в интернете не прижился бы. LIMIT позволяет ограничить объем выборки указанным диапазоном. На этой штуке базируется логика выборки данных для всяких форумов, конференций, новостных страниц и пр. Почему? Ну представьте, что посетитель Вашей страницы хочет просмотреть список новостей, начиная с текущей даты. Вы можете вывалить ему в ответ список сообщений (допустим, их накопилось штук 300 или 1000), превратив бегунок вертикального скроллбара броузера в узкую полоску или выдать сообщения порциями по нескольку штук. Но где хранить всю выборку между выдачами очередных порций? Ведь после ответа на запрос клиентского броузера web-сервер разорвет соединение, освободив выделенные ранее ресурсы. Решение может быть таким:
$result=mysql_query("SELECT * FROM ".$table." LIMIT ".$start.", ".$rows);
|
где $start=$rows * $page_number, а $page_number - параметр, на 1 больший номера текущей страницы для перехода к следующей "пачке", и на 1 меньший - для предыдущей порции Ваших сообщений. Этот прием будет продемонстрирован в следующих шагах, когда мы разработаем полноценный отчет по книжным спискам.
- PROCEDURE имя_процедуры - с версии 3.22 можно задать процедуру обработки запроса. Эту возможность я сам еще не использовал. Привожу ее для "кучи". Позднее разберусь - опишу.
Некоторые функции, которые могут быть использованы в WHERE и в SELECT (скажем, в конструкции SELECT функция(...) FROM dual, где dual - созданная нами таблица с одной (все равно какой) записью - см. замечание в начале "Подробностей").
- DATABASE() - вернет имя текуще базы. Скажем,
SELECT DATASET() FROM какая_нибудь_таблица_из_открытой_базы LIMIT 1
|
(LIMIT - чтобы на выводе иметь только одну строку).
Обращаю внимание на изобилие форматов вывода для дат в функции DATE_FORMAT().
- ENCRYPT и PASSWORD - предназначены для шифрования строк (по-моему, по методу DES от UNIX-операционок).
|