28 запросов на страницу, можно ли проще?

aidan

Guest
28 запросов на страницу, можно ли проще?

Смысл такой, что на странице есть алфавит. Клик на каждую букву приводит на страницу, где происходит выборка записей из базы, согласно этой букве (например первая буква в названии чего-либо).

Требуется что бы когда выводится алфавит буква была неактивной, если ей не соответствует ни одной записи в базе.
Ключч к решению вижу:

PHP:
if (mysql_num_rows(mysql_query("select id from rr where namet like 'а%' limit 1", $link))>0)
{ echo("<a href='index.php?p=all&ac=2&l=а'><span class=link1> А</span></a>"); } 
else 
{ echo(" А"); }
Но мне кажется 28 запросов на одну страницу много, особенно если посетителей будет больше 1 :)

Если более рациональный способ или этот тоже хорош?
 

Demiurg

Guest
select distinct left(namet , 1) from rr
будет тебе список букв на которые есть слова.
 

aidan

Guest
большое спасибо, для меня это открытие :)
 

Falc

Новичок
aidan
Но при большом кол-ве записей в базе, твой вариант будет эфективнее, т.к. он использует индексы.
 

slach

Новичок
Falc ;) 33 запроса эффективнее чем ОДИН ???
можно ТЕСТЫ ? какие нибудь ? пожалуйста !

большое количество записей в моем понимании это от 100 тысяч а в вашем ?

и кроме того учти, что namet скорее всего не проиндексированное поле у товарища =) а если и проиндексированное то там стоит как минимум VARCHAR(64)
 

tony2001

TeaM PHPClub
при больших кол-вах выгоднее будет завести доп. поле со своим индексом, в котором будет только 1-я буква.
 

Demiurg

Guest
при больших количествах букв есть очень большая вероятность, что выводить придется весь алфавит (кроме Ь, Ъ и еще пары букв)
 

chira

Новичок
aidan
можешь проверить на EXPLAIN ещё такой вариант:
Код:
select left(namet , 1), count(*) cn
from rr
group by 1
 

Falc

Новичок
chira

Чем он лучше того что привел Деми?


slach
>>Falc 33 запроса эффективнее чем ОДИН ???
>>можно ТЕСТЫ ? какие нибудь ? пожалуйста !
почитай ман.
 

chira

Новичок
Чем он лучше того что привел Деми?
лучше или хуже решать aidan-у, я предложил ещё один вариант для теста.
EXPLAIN будет примерно одинаковый, результат (по скорости) может оказаться разный.
 

slach

Новичок
Falc, ок, почитаю =) ткни куда именно читать...

ЗЫ, тони вот правильно говорит
проще поле завести с первой буквой =) проиндексированное =)
 

Falc

Новичок
slach
>>ткни куда именно читать...
Про скорость индексных выборок.
А заодно запусти запрос с дистинктом и лефтом на таблице из 100к записей.

Да вариант Тони для большого кол-ва записей будет оптимальным.

chira
>>EXPLAIN будет примерно одинаковый, результат (по скорости) может оказаться разный.
Если и разный то боюсь не в твою пользу.
 
Сверху