Поиск записей в таблице(SELECT)
Posted by writer on Июнь 7th, 2008
- Поиск записей осуществляется командой SELECT
- SELECT * FROM table_name WHERE (выражение) [order by field_name [desc][asc]]
- Эта команда ищет все записи в таблице table_name, которые удовлетворяют выражению выражение.
- Если записей несколько, то при указаном предложении order by они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задано слово desc, то упорядочивание происходит в обратном порядке). В предложении order by могут также задаваться несколько полей.
- Особое значение имеет символ *. Он предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. С другой стороны, вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения. Но чаще всего все же пользуются именно *.
- Например, нам надо найти в таблице, содержащей сообщения в гостевой книге, все записи, которые оставил определенный пользователь.
-
// Имя пользователя $user="Admin"; // name - имя поля в таблице, которое содержит имена пользователей, // оставивших свои сообщения в гостевой // db_guest - имя таблицы, содержащей сообщения, оставленные в гостевой $sql="select * from db_guest where (name='$user')"; $result=mysql_query($sql); // Находим кол-во записей, удовлетворяющих условию $rows=mysql_num_rows($result); echo "$user оставил в гостевой $rows записей.";
- Но что делать, если искомый текст не занимает все поле, а является частью этого поля (например, при поиске слова или словосочетания в общем массиве текста)?
- Например я использую следующую команду (наверно этот способ не самый лучщий, но тем не менее он работает):
-
// $search - содержит искомый тест $sql="select * form db_guest where (locate('$search',content)>0)"; $result=mysql_query($sql); - Смысл такой: если кол-во вхождений строки $search в поле content больше 0 (т.е. оно вообще есть), то запись добавляется к остальным найденым записям.
- Надо отметить, что указанный способ ищет текст с учетом регистра. Чтобы искать без учета регистра, можно воспользоваться следующей командой:
-
// $search - содержит искомый тест $sql="select * form db_guest where (locate(lower('$search'),lower(content))>0)"; $result=mysql_query($sql); - т.е. искомая строка и запись в таблице переводится в верхний регистр и затем производится поиск.
-
Теперь представим, что у нас есть база сообщений гостевой книги, и нам надо отсортировать сообщения по времени, когда они были оставлены.
- Для этого одно из полей таблицы базы должно содержать время записи сообщения.
- Сортировка по какому-либо столбцу осуществляется при помощи конструкции order by.
- В нашем случае, при учете, что более “свежие” сообщения будут сортироваться верхними:
-
// time - столбец, содержащий время написания записи // в формате "UNIX timestamp" $sql="SELECT * FROM db_guest ORDER BY data DESC"; $result=mysql_query($sql);
- Т.е. данные были отсортированны по убыванию.
- Если нам надо отсортировать данные по возростанию, надо вместо ключевого слова DESC применить ASC:
-
$sql="SELECT * FROM db_guest ORDER BY data ASC"; $result=mysql_query($sql);
- Данные также можно отсортировать по нескольким столбцам. Для этого надо названия столбцов указать через запятую.
- Это может пригодиться, например, если в столбце, по которому производится сортировка, есть несколько одинаковых значений.
-
$sql="SELECT * FROM db_name ORDER BY field1,field2 ASC"; $result=mysql_query($sql);
- Сначало данные сортируются по первому столбцу field1. Затем, если в первом столбце есть несколько одинаковых значений, выполняется дополнительная сортировка по второму столбцу (внутри группы с одинаковыми значениями в первом столбце).
-
Если требуется, чтобы при поиске выдавались не все найденные записи, а определенная группа, то нужно использовать параметр LIMIT.
- В этом параметре задается два значения:
- LIMIT start,length
- start - указывает, с какой позиции нужно выдавать найденные записи
- length - кол-во записей
- Например, нам нужно выбрать из базы данных гостевой книги записи начиная с 20 по 45 (т.е. чтоб вывести 25 записей):
-
$sql="select * from db_guest limit 20,25"; $result=mysql_query($sql);