|
Интернет-торговля для чайников на 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-запроса, реализованному по следующему принципу. |