Интернет-торговля для чайников на PHP

Никита Кислицин

Xakep, номер #055, стр. 055-072-2


Таблица с разделами товаров:

mysql> create table categories(

-> Cid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

-> Name VARCHAR(30) NOT NULL);

С информацией о товарах:

mysql> create table goods(

-> Gid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

-> Cid INT NOT NULL,

-> Name VARCHAR(50) NOT NULL,

-> Description VARCHAR(50) NOT NULL,

-> Photo VARCHAR(50) NOT NULL,

-> Buying INT NOT NULL,

-> Price INT NOT NULL);

С информацией о пользователях:

mysql> create table users(

-> Uid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

-> FirstName VARCHAR(50) NOT NULL,

-> LastName VARCHAR(50) NOT NULL,

-> Telephone VARCHAR(20) NOT NULL,

-> Email VARCHAR(40) NOT NULL,

-> Address VARCHAR(40) NOT NULL,

-> Login VARCHAR(40) NOT NULL,

-> Password VARCHAR(40) NOT NULL);

С информацией о покупках:

mysql> create table sales(

-> Sid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

-> Gid INT NOT NULL,

-> Uid INT NOT NULL,

-> Date date NOT NULL,

-> Time int NOT NULL);

Shkoding

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

Перед словом, которое должно обязательно присутствовать либо в названии, либо в описании товара, пользователю следует поставить "+". Если же слово, наоборот, ни в коем случае не должно встречаться при поиске товара, его следует набирать с префиксом "-".

Кроме того, можно при помощи кавычек объединять в цитату несколько слов.

Я написал функцию, которая по данной строке поиска генерирует SQL-запрос на выборку подходящих записей.

Работает она следующим образом. Первым делом из строки вырезаются все слеши. Далее полученная строка разбивается в массив $search по разделителю " ". После этого составляются и помещаются в массив $Lexeme лексемы поиска (искомые элементы, фактически - все слова и цитаты), которые будут использоваться при построении SQL-запроса.

Прежде чем помещать слово в этот массив, следует обязательно проверить, не начинается ли оно с символа ". Ведь фраза, заключенная в кавычки, является одной лексемой.

Получив массив с лексемами ($Lexeme), переходим к основному этапу - составлению SQL-запроса, реализованному по следующему принципу.

Назад на стр. 055-072-1  Содержание  Вперед на стр. 055-072-3