Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

php поиск в MySQL

2.0K
03 июня 2004 года
TimON
26 / / 17.02.2003
Надо найти слово в БД, я делаю так:
$sql="select * from * where (locate('$search', name)>0)";
$result = mysql_query($sql, $link);

$search - это слово, вхождение которого ищу, но запрос ничего не даёт, может кто подскажет, как надо?

Не работает и $sql="select * from Monitor, Acsessuary where (locate(lower('$search'), lower(name))>0)";

Но работает при $sql="select * from Monitor where (locate(lower('$search'), lower(name))>0)";
а надо чтоб из всех таблиц, их порядка 13 штук.
4
04 июня 2004 года
mike
3.7K / / 01.10.2002
Почитай про like :)

$sql="SELECT * FROM table WHERE name like '%".$search."%';";

или

$sql="SELECT * FROM table WHERE lower(name) like lower('%".$search."%');";
2.0K
04 июня 2004 года
TimON
26 / / 17.02.2003
Цитата:
Originally posted by mike
Почитай про like :)

$sql="SELECT * FROM table WHERE name like '%".$search."%';";

или

$sql="SELECT * FROM table WHERE lower(name) like lower('%".$search."%');";


Для одно таблицы работает и то, что я указал выше, т.е. Locate, а вот для нескольких не хотелось бы создавать цикл, поэтому вопрос заключается в том, можно ли создать один запрос из нескольких таблиц?

Кстати, заметил, что при Locate учитывается регистр букв даже при использовании Lower, так что пришлось использовать Like. С ним проблем нет.

4
04 июня 2004 года
mike
3.7K / / 01.10.2002
Цитата:
Originally posted by TimON

Для одно таблицы работает и то, что я указал выше, т.е. Locate, а вот для нескольких не хотелось бы создавать цикл, поэтому вопрос заключается в том, можно ли создать один запрос из нескольких таблиц?

Кстати, заметил, что при Locate учитывается регистр букв даже при использовании Lower, так что пришлось использовать Like. С ним проблем нет.



И для двух, и даже для десяти работает.
Просто когда делаешь выборку из двух таблиц, указывай поле как таблица.поле.

А вообще, тебе бы строил про реляционные базы данных почитать, потом как у тебя в твоем запросе будет произведено декартово произведения, так как не прослеживается связь по полям:

Вот например две таблицы:

tbl1:
f1 f2
1 aaa
2 bbb

tbl2:

f1 f2
1 111
2 222

Запрос:

SELECT * FROM tbl1, tbl2

выдаст декартово произведение:

f1 f2 f1 f2

1 aaa 1 111
1 aaa 2 222
2 aaa 1 111
2 aaa 2 222

а запрос:

SELECT * FROM tbl1, tbl2 WHERE tbl1.f1=tbl2.f1;

1 aaa 111
2 bbb 222

Таким образом тебе надо написать вот так:

$sql="SELECT * FROM tbl1, tbl2 WHERE (tbl1.name like '%".$search."%' OR tbl2.name like '%".$search."%') AMD tbl1.key=tbl2.key;";

и плюс еще как-то связь между таблицами обозначить.

Если тебе нужно искать независимо в двух таблицах, то придется искать по очереди.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог