Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по базе, Слов или цифр 
:(
    Опции темы
supercelt
Дата 28.2.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



В БД есть список фирм. Реализован поиск по алфавиту и цифрам (Ищются по первой букве или цифре в названии), вот кусочек запроса
Код

$param.=' AND `FirmName` LIKE "'.$alf.'%"';

$alf - это буква алфавита, на которую нажали. 
Так вот всё ищется первосходно, но когда альф = 0, то выводится из базы всё, а надо только тех, у которых название начинается с 0 
Help!!
PM   Вверх
GeneralElectric
Дата 28.2.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 2
Всего: 16



Дорогие посетители форума!
Если у вас вопрос связан с SQL зпросом, то будьте, пожалуйста, так добры - пишите в своем вопросе этот запрос!
Примечание: база данных не умеет интерпретировать код PHP. Следовательно, никаокго кода РНР в запросе быть не может.
PM MAIL   Вверх
supercelt
Дата 28.2.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Код

$param.=' AND `FirmName` LIKE "'.$alf.'%"';


$query_total='SELECT id FROM '.MPREFIX.'bsfirms WHERE '.$param.'';
$query_t=mysql_query($query_total);


Добавлено через 1 минуту и 31 секунду
или

Код

SELECT * FROM table WHERE FirmName LIKE '0%';

PM   Вверх
GeneralElectric
Дата 28.2.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 2
Всего: 16



supercelt, это действительно тот самый запрос, который уходит в базу?
или то, как он по твоему мнению должен выглядеть?
PM MAIL   Вверх
supercelt
Дата 28.2.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Это то, который уходит в базу, но он на пхп написан, там выше пример приведён. 
Да и вообще дело не в том как написан мой запрос, а сама концепция того, как искать данные по первой букве в названии
PM   Вверх
Fortop
Дата 28.2.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(supercelt @  28.2.2008,  16:18 Найти цитируемый пост)
Да и вообще дело не в том как написан мой запрос, а сама концепция того, как искать данные по первой букве в названии

Концепция верная smile Но, скорее всего, ты передаешь не тот запрос который тут привел.
Т.е. проверь, что он у тебя уходит именно в виде

Код

SELECT * FROM table WHERE FirmName LIKE '0%';


А не

Код

SELECT * FROM table WHERE FirmName LIKE '%';



Это сообщение отредактировал(а) Fortop - 28.2.2008, 16:41


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
supercelt
Дата 28.2.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



стопудово там есть 0
PM   Вверх
mishaSL
Дата 28.2.2008, 17:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



supercelt, сделай print $query_total; перед mysql_query и покажи что получилось. Т.к. по твоему примеру кода вообще ничего работать не должно.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
supercelt
Дата 28.2.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



разобрался, всем спасибо за подсказки)
Код

if(!empty($alf) or $alf==0)
  {
  ($alf==0) ? $alf='0' : '';
  $param.=' AND `FirmName` LIKE "'.$alf.'%"';
  }

PM   Вверх
solenko
Дата 28.2.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



//offtop
*интерестно, если нужно искать только по первой букве, то что будет быстрее -- LIKE или SUBSTRING?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
gta4kv
Дата 28.2.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



solenko, по-мойму like будет всегда быстрее.. но это только имхо..
PM MAIL   Вверх
Kesh
Дата 28.2.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



А так не пойдет?
Код

$param.=' AND `FirmName` LIKE "'.(int)$alf.'%"';



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
solenko
Дата 28.2.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



gta4kv, интуиция подвела -- одинаково. Проверял на 1,5М записей

Kesh, не пойдет -- читаем ТЗ
Цитата

поиск по алфавиту и цифрам



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 28.2.2008, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(solenko @  28.2.2008,  20:22 Найти цитируемый пост)
Проверял на 1,5М записей

наверное, там оптимизация. все же не так уж сложно на стороне сервера привести 
Код

`field` LIKE "<some pattern>%"

к аналогу
Код

LOCATE("<some pattern>",`field`)> 0

PM MAIL   Вверх
Fortop
Дата 28.2.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



LIKE предоставляет большие возможности, кроме % у него есть и другие плейсхолдеры,
 а следовательно должен работать медленнее SUBSTRING


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.