ЖЖ от 2005-11-07 09:23:00

Качество проекта kazan.ws можно оценить по этим двум запросам, которые выдались мне на экран, когда я вбил в поиск телефонов свой домашний телефон:

SELECT priv_phones.fio ,priv_phones.bldg, priv_phones.aprt,
priv_phones.phone, priv_phones.str FROM priv_phones WHERE
priv_phones.phone LIKE 'XXXXXX' and priv_phones.phone NOT LIKE '37%'

SELECT count(*) FROM priv_phones WHERE priv_phones.phone LIKE 'XXXXXX' and priv_phones.phone NOT LIKE '37%'

Комментарии 25

smilk № 1
о ужас! что такое substring им, болезным, похоже, не ведомо? с другой стороны, заказчики должны сказать спасибо, что создатели не воспользовались какой-нибудь еще большей экзотикой, вроде soundex'а. )
bolk автор № 2
Мне тут непонятно следующее:
1) зачем делать LIKE, если номер попадает целиком, без «%» и «_»?
2) что тут делает NOT LIKE '37%'?
3) зачем повторять тот же запрос, но c «COUNT», если в PHP есть «mysql_num_rows»
4) эти люди не слышали о «LIMIT»?
5) эти люди не слышали о «SQL_CALC_FOUND_ROWS» (конечно, у них может быть старый MySQL)?
6) зачем в запросе из одной таблицы в именах столбцов указывать имя таблицы?
7) что такое «bldg»? кто так называет столбцы?

Вот как, по моему мнению, должен выглядеть этот запрос в том случае, если запрашивается один номер:

SELECT fio, bilding, flat, street
FROM priv_phones
WHERE phone='XXXXXX'

несколько номеров:

SELECT SQL_CALC_FOUND_ROWS fio, bilding, flat, street, phone
FROM priv_phones
WHERE phone LIKE '%XXX%'
LIMIT 30 OFFSET 10
smilk № 3
Согласен. Последний запрос все же лучше, имхо, оформить как «…where locate('XXX', phone) > 0».
bolk автор № 4
Можно и так. Я, если честно, сейчас немного не в курсе что там в MySQL быстрее выполняется. В нём сейчас столько оптимизаций, что неясно что быстрее чего работает.

Когда я узнать, что POSIX regexp работают медленее Perl regexp я понял, что пора прекратить оценивать производительность чего либо, раскладывая это, в уме на циклы и прочее.
u1itka № 5
Знаю тех, кто там работает, не удивлен.

Исправь building, и fio коряво выглядит среди терминов на английском.
bolk автор № 6
опечатка, бог с ней. Зато fio поймёт каждый.
u1itka № 8
bolk, SQL Injection не проходит, зато если писать бред в поле для ввода, то запрос получается SELECT … LIKE '%'. Вот это веселье!
Нормальная система вообще не должна давать искать «все записи».
bolk автор № 9
u1itka, Где именно не проходит SQL Injection? на kazan.ws? там наверняка magic_quotes :)

Нормальная система не должна показывать весь список, если это от неё не требуется, а показ этого списка жрёт ресурсы.
ilyabirman № 12
И всё-таки
name, building, apartment, street, phone
bolk автор № 13
Это неважно. В каждой компании должен быть документ, где прописано как называются частоупотребляемые поля. Будет там fio или name лично мне неважно.
santail_virt № 15
Извините за офтопик, но кто может снять бан с пользователя santail в community ru_php ? Спасибо.
bolk автор № 17
Любой модератор, но практически надо знать за что его банили. Вы бы написали остальным тоже, обычно забаненные так и поступают.
_kamil_ № 21
это же вроде проект Гринлайна? тех, кто сидят (или сидели) на Достоевского
там еще вроде много студентов, пришедших с полным нулем знаний, работают
(просто было такое впечатление — пару раз за последние 5 лет забегал туда на интервью
или неверное впечатление?)