***
создаем модуль , Положение: пишем в него content-modul
{ loadposition content-modul }
****
http://cssdeck.com/labs/17axjoxn Часы
****
В общем есть таблица `student` (`id`, `fio`, `grup`, `namenum`, `poz`, `school`, `poditel`, `parent`, `tel`, `sex`)
Подскажите где почитать\посмотреть как сделать, что бы через форму можно было найти по fio и вывести все остальные значения `fio`, `grup`, `namenum`, `poz`, `school`, `poditel`, `parent`, `tel`, `sex`
Собственно просто выборка
mysql_select("select * from `student` where `fio` like '%" . mysql_escape_string($_POST['fio']) . "%'");
Это поиск по фамилии…
<form action="post">
<input type="text" name="fio" />
<input type="submit" />
</form>
http://www.mysql.ru/docs/man/Fulltext_Search.html
6.8 Полнотекстовый поиск в MySQL
Что касается MySQL 3.23.23, то эта версия MySQL поддерживает полнотекстовый поиск и индексацию. Полнотекстовые индексы в MySQL обозначаются как индексы типа FULLTEXT
. Эти индексы могут быть созданы в столбцах VARCHAR
и TEXT
во время создания таблицы командойCREATE TABLE
или добавлены позже с помощью команд ALTER TABLE
или CREATE INDEX
. Загрузка больших массивов данных в таблицу будет происходить намного быстрее, если таблица не содержит индекс FULLTEXT
, который затем создается командой ALTER TABLE
(или CREATE INDEX
). Загрузка данных в таблицу, уже имеющую индекс FULLTEXT
, будет более медленной.
Полнотекстовый поиск выполняется с помощью функции MATCH()
.
mysql> CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO articles VALUES
(0,'MySQL Tutorial', 'DBMS stands for DataBase …'),
(0,'How To Use MySQL Efficiently', 'After you went through a …'),
(0,'Optimising MySQL','In this tutorial we will show …'),
(0,'1001 MySQL Trick','1. Never run mysqld as root. 2. …'),
(0,'MySQL vs. YourSQL', 'In the following database comparison …'),
(0,'MySQL Security', 'When configured properly, MySQL …');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison … |
| 1 | MySQL Tutorial | DBMS stands for DataBase … |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
Функция MATCH()
выполняет поиск в естественном языке, сравнивая строку с содержимым текста (совокупность одного или более столбцов, включенных в индекс FULLTEXT
). Строка поиска задается как аргумент в выражении AGAINST()
. Поиск выполняется без учета регистра символов. Для каждой строки столбца в заданной таблице команда MATCH()
возвращает величину релевантности, т.е. степень сходства между строкой поиска и текстом, содержащимся в данной строке указанного в списке оператора MATCH()
столбца.
Когда команда MATCH()
используется в выражении WHERE
(см. пример выше), возвращенные строки столбцов автоматически сортируются, начиная с наиболее релевантных. Величина релевантности представляет собой неотрицательное число с плавающей точкой. Релевантность вычисляется на основе количества слов в данной строке столбца, количества уникальных слов в этой строке, общего количества слов в тексте и числа документов (строк), содержащих отдельное слово.
Поиск возможен также в логическом режиме, это объясняется ниже в данном разделе.
Предыдущий пример представляет собой общую иллюстрацию использования функции MATCH()
. Строки возвращаются в порядке уменьшения релевантности.
В следующем примере показано, как извлекать величины релевантности в явном виде. В случае отсутствия выражений WHERE
и ORDER BY
возвращаемые строки не упорядочиваются.
mysql> SELECT id,MATCH (title,body) AGAINST ('Tutorial') FROM articles;
+----+-----------------------------------------+
| id | MATCH (title,body) AGAINST ('Tutorial') |
+----+-----------------------------------------+
| 1 | 0.64840710366884 |
| 2 | 0 |
| 3 | 0.66266459031789 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
+----+-----------------------------------------+
6 rows in set (0.00 sec)
Следующий пример — более сложный. Запрос возвращает значение релевантности и, кроме того, сортирует строки в порядке убывания релевантности. Чтобы получить такой результат, необходимо указать MATCH()
дважды. Это не приведет к дополнительным издержкам, так как оптимизатор MySQL учтет, что эти два вызова MATCH()
идентичны, и запустит код полнотекстового поиска только однажды.
mysql> SELECT id, body, MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root') AS score
-> FROM articles WHERE MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root');
+----+-------------------------------------+-----------------+
| id | body | score |
+----+-------------------------------------+-----------------+
| 4 | 1. Never run mysqld as root. 2. … | 1.5055546709332 |
| 6 | When configured properly, MySQL … | 1.31140957288 |
+----+-------------------------------------+-----------------+
2 rows in set (0.00 sec)
Для разбивки текста на слова MySQL использует очень простой синтаксический анализатор. ``Словом'' является любая последовательность символов, состоящая из букв, чисел, знаков `'' и `_'. Любое ``слово'', присутствующее в стоп-списке (stopword) или просто слишком короткое (3 символа или меньше), игнорируется.
Каждое правильное слово в наборе проверяемых текстов и в данном запросе оценивается в соответствии с его важностью в этом запросе или наборе текстов. Таким образом, слово, присутствующее во многих документах, будет иметь меньший вес (и даже, возможно, нулевой), как имеющее более низкое смысловое значение в данном конкретном наборе текстов. С другой стороны, редко встречающееся слово получит более высокий вес. Затем полученные значения весов слов объединяются для вычисления релевантности данной строки столбца.
Описанная техника подсчета лучше всего работает для больших наборов текстов (фактически она именно для этого тщательно настраивалась). Для очень малых таблиц распределение слов не отражает адекватно их смысловое значение, и данная модель иногда может выдавать некорректные результаты.
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL');
Empty set (0.00 sec)
Поиск по слову ``MySQL'' в предыдущем примере не приводит к каким-либо результатам, так как это слово присутствует более чем в половине строк. По существу, данное слово целесообразно трактовать как стоп-слово (т.е. слово с нулевой смысловой ценностью). Это наиболее приемлемое решение — запрос на естественном языке не должен возвращать каждую вторую строку из таблицы размером 1Гб.
Маловероятно, что слово, встречающееся в половине строк таблицы, определяет местонахождение релевантных документов. На самом деле, наиболее вероятно, что будет найдено много не относящихся к делу документов. Общеизвестно, что такое случается слишком часто при попытке найти что-либо в Интернет с помощью поисковых машин. Именно на этом основании подобным строкам должно быть назначено низкое смысловое значение в данном конкретном наборе данных.
В MySQL 4.0.1 возможен полнотекстовый поиск также и в логическом режиме с использованием модификатора IN BOOLEAN MODE
.
mysql> SELECT * FROM articles WHERE MATCH (title,body)
-> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
+----+------------------------------+-------------------------------------+
| id | title | body |
+----+------------------------------+-------------------------------------+
| 1 | MySQL Tutorial | DBMS stands for DataBase … |
| 2 | How To Use MySQL Efficiently | After you went through a … |
| 3 | Optimising MySQL | In this tutorial we will show … |
| 4 | 1001 MySQL Trick | 1. Never run mysqld as root. 2. … |
| 6 | MySQL Security | When configured properly, MySQL … |
+----+------------------------------+-------------------------------------+
Данный запрос вывел все строки, содержащие слово ``MySQL'' (заметьте, 50-процентная пороговая величина здесь не используется), но эти строки не содержат слова ``YourSQL''. Следует отметить, что логический режим поиска не сортирует автоматически строки в порядке уменьшения релевантности. Это видно по результату предыдущего запроса, где строка с наиболее высокой релевантностью (содержащая слово ``MySQL'' дважды) помещена последней, а не первой. Логический режим полнотекстового поиска может работать даже без индекса FULLTEXT
, хотя и очень медленно.
В логическом режиме полнотекстового поиска поддерживаются следующие операторы:
+
- Предшествующий слову знак ``плюс'' показывает, что это слово должно присутствовать в каждой возвращенной строке.
-
- Предшествующий слову знак ``минус'' означает, что это слово не должно присутствовать в какой-либо возвращенной строке.
- По умолчанию (если ни плюс, ни минус не указаны) данное слово является не обязательным, но содержащие его строки будут оцениваться более высоко. Это имитирует поведение команды
MATCH() … AGAINST()
без модификатора IN BOOLEAN MODE
. < >
- Эти два оператора используются для того, чтобы изменить вклад слова в величину релевантности, которое приписывается строке. Оператор
<
уменьшает этот вклад, а оператор >
- увеличивает его. См. пример ниже. ( )
- Круглые скобки группируют слова в подвыражения.
~
- Предшествующий слову знак ``тильда'' воздействует как оператор отрицания, обуславливая негативный вклад данного слова в релевантность строки. Им отмечают нежелательные слова. Строка, содержащая такое слово, будет оценена ниже других, но не будет исключена совершенно, как в случае оператора — ``минус''.
*
- Звездочка является оператором усечения. В отличие от остальных операторов, она должна добавляться в конце слова, а не в начале.
"
- Фраза, заключенная в двойные кавычки, соответствует только строкам, содержащим эту фразу, написанную буквально.
Ниже приведен ряд примеров:
apple banana
- находит строки, содержащие по меньшей мере одно из этих слов.
+apple +juice
- … оба слова.
+apple macintosh
- … слово ``apple'', но ранг строки выше, если она также содержит слово ``macintosh''.
+apple -macintosh
- … слово ``apple'', но не ``macintosh''.
+apple +(>pie <strudel)
- … ``apple'' и ``pie'', или ``apple'' и ``strudel'' (в любом порядке), но ранг ``apple pie'' выше, чем ``apple strudel''.
apple*
- … ``apple'', ``apples'', ``applesauce'', и ``applet''.
"some words"
- … ``some words of wisdom'', но не ``some noise words''.
http://www.mysql.ru/docs/man/String_comparison_functions.html
6.3.2.1 Функции сравнения строк
Обычно если при выполнении сравнения строк одно из выражений является зависимым от регистра, то сравнение выполняется также с учетом регистра.
expr LIKE pat [ESCAPE 'escape-char']
- Функция производит сравнение с шаблоном, используя операции сравнения простых регулярных выражений в SQL. Возвращает
1
(ИСТИНА) или 0
(ЛОЖЬ). Выражение LIKE
предусматривает использование следующих двух шаблонных символов в pat
:
Символ |
Описание |
% |
Соответствует любому количеству символов, даже нулевых |
_ |
Соответствует ровно одному символу |
mysql> SELECT 'David!' LIKE 'David_';
-> 1
mysql> SELECT 'David!' LIKE '%D%v%';
-> 1
Если требуется исследовать литералы при помощи шаблонного символа, следует предварить шаблонный символ экранирующим символом. Если экранирующий символ конкретно не указывается, то подразумевается применение символа `\':
Строка |
Описание |
\% |
Соответствует одному символу `%' |
\_ |
Соответствует одному символу `_' |
mysql> SELECT 'David!' LIKE 'David\_';
-> 0
mysql> SELECT 'David_' LIKE 'David\_';
-> 1
Для указания конкретного экранирующего символа используется выражение ESCAPE
:
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
В следующих двух примерах показано, что сравнение строк производится с учетом регистра, если ни один из операндов не является строкой с двоичными данными:
mysql> SELECT 'abc' LIKE 'ABC';
-> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
-> 0
В функции LIKE
допускаются даже числовые выражения! (Это расширение MySQL по сравнению с ANSI SQL LIKE.)
mysql> SELECT 10 LIKE '1%';
-> 1
Примечание: поскольку в MySQL применяются правила экранирования в строках, применяемые в языке C (например, `\n'), необходимо дублировать все символы `\', используемые в строках функции LIKE
. Например, для поиска сочетания символов `\n' его необходимо указать как `\\n'. Чтобы выполнить поиск символа `\', он должен быть указан как `\\\\' (обратные слеши удаляются дважды: сначала синтаксическим анализатором, а потом — при выполнении сравнения с шаблоном, таким образом остается только один обратный слеш, который и будет обрабатываться). expr NOT LIKE pat [ESCAPE 'escape-char']
- То же, что и
NOT (expr LIKE pat [ESCAPE 'escape-char'])
. expr REGEXP pat
expr RLIKE pat
- Выполняет сравнение строкового выражения
expr
с шаблоном pat
. Шаблон может представлять собой расширенное регулярное выражение. See section G Регулярные выражения в MySQL. Возвращает 1
, если expr
соответствует pat
, в противном случае - 0
. ФункцияRLIKE
является синонимом для REGEXP
, она предусмотрена для совместимости с mSQL. Примечание: поскольку в MySQL используются правила экранирования в строках, применяемые в языке C (например, `\n'), необходимо дублировать все символы `\', используемые в строках функции REGEXP
. Что касается версии MySQL 3.23.4, функция REGEXP
является независимой от регистра для нормальных строк (т.е. строк не с двоичными данными):
mysql> SELECT 'Monty!' REGEXP 'm%y%%';
-> 0
mysql> SELECT 'Monty!' REGEXP '.*';
-> 1
mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
-> 1
mysql> SELECT "a" REGEXP "A", "a" REGEXP BINARY "A";
-> 1 0
mysql> SELECT "a" REGEXP "^[a-d]";
-> 1
В REGEXP
и RLIKE
используется текущий набор символов (ISO-8859-1 Latin1 по умолчанию), expr NOT REGEXP pat
expr NOT RLIKE pat
- То же, что и
NOT (expr REGEXP pat)
. STRCMP(expr1,expr2)
- Функция
STRCMP()
возвращает: 0
, если строки идентичны, -1
- если первый аргумент меньше второго (в соответствии с имеющимся порядком сортировки), и 1
- в остальных случаях:
mysql> SELECT STRCMP('text', 'text2');
-> -1
mysql> SELECT STRCMP('text2', 'text');
-> 1
mysql> SELECT STRCMP('text', 'text');
-> 0
MATCH (col1,col2,…) AGAINST (expr)
MATCH (col1,col2,…) AGAINST (expr IN BOOLEAN MODE)
- Функция
MATCH … AGAINST()
используется для полнотекстового поиска и возвращает величину релевантности — степень сходства между текстом в столбцах (col1,col2,…)
и запросом expr
. Величина релевантности представляет собой положительное число с плавающей точкой. Нулевая релевантность означает отсутствие сходства. Функция MATCH … AGAINST()
работает в версиях MySQL 3.23.23 или более поздних. Расширение IN BOOLEAN MODE
было добавлено в версии 4.0.1. Более подробное описание и примеры использования приведены в разделе section 6.8 Полнотекстовый поиск в MySQL.
****
Позволю себе запостить пример, приведенный выше, немного исправленный, с использованием mysql
, который не рекомендуется к использованию:
$sdd_db_host=''; // ваш хост
$sdd_db_name=''; // ваша бд
$sdd_db_user=''; // пользователь бд
$sdd_db_pass=''; // пароль к бд
$conn = mysql_connect($sdd_db_host,$sdd_db_user,$sdd_db_pass); // коннект с сервером бд
if(!$conn)
{
throw new Exception('Не удалось подключиться к базе данных! Проверьте параметры подключения');
}
if(!mysql_select_db($sdd_db_name, $conn)) // выбор бд
{
throw new Exception("Не удалось выбрать базу данных {$ssd_db_name}!");
}
$result = mysql_query('SELECT * FROM `table_name`', $conn); // запрос на выборку
if(!$result)
{
throw new Exception(sprintf('Не удалось выполнить запрос к БД, код ошибки %d, текст ошибки: %s', mysql_errno($conn), mysql_error($conn)));
}
while($row = mysql_fetch_array($result))
{
echo '<p>Запись id='.$row['id'].'. Текст: '.$row['text'].'</p>';// выводим данные
}
**********
привязать к выводу внешний css-файл, например сменить шрифт выводимой скриптом информации
<html>
<head>
<link rel="stylesheet" href="/ie.css">
</head>
<body>
<?php /* код… */ ?>
</body>
</html>
***************