- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
while ($rst=mysql_fetch_array($rst_query))
{
$clist.="," . $rst["es_id"];
$thislist="-1," . $rst["es_id"];
while ($rst=mysql_fetch_array($rst_query))
{
$clist.="," . $rst["es_id"];
$thislist.="," . $rst["es_id"];
}
$rst_query=mysql_query("Select * from esb2b_categories where es_pid in (" . $thislist . ")" );
}
nechin 16.11.2009 15:10 # 0
paranoid 16.11.2009 18:24 # +2
фтопку такие итерации
guest 16.11.2009 18:27 # −1
primpil 16.11.2009 18:30 # +2
Oleg_quadro 17.11.2009 13:50 # +2
Если в Мускуле есть конструкция connect by как в оракле, то надо использовать её.
Пример мне тут понятен. Тут я даже не знаю минусовать или плюсовать. Предлагаю автору переписать пример и написать его в комментах.
Oleg_quadro 17.11.2009 13:55 # 0
собирать айдишники родителей в одну строку не есть гуд, так как количество детишек (не важно от какого родителя) на каждом уровне может увеличиваться в геометрической прогрессии, в результате может быть наложен запрет на выполенение запроса (например, в оракле допустимо в конструкции in писать только тысячу элементов)
Oleg_quadro 17.11.2009 13:57 # 0
primpil 17.11.2009 14:11 # 0
конструкция использовалась для подсчета количества итемов в категории и всех ее дочках . выкинул сюда как есть. в принципе, нормальное решение, но там оно не по назначению используется. для 600к записей в таблице даже на мощном серваке при растущем числе посещений начинались серьезные проблемы. вкупе с остальным говнокодом приводило к тому, что сервак ложился даже от поисковых роботов.
Oleg_quadro 17.11.2009 15:08 # 0
Которое изменять при добавлении и удалении итема.
Может если не выбирать сразу кучу записей, у которых айдишник родителей содержится среди кучи элементов, а выбирать детей от каждого родителя по отдельности, то будет руче. (то есть заменить строку thislist на массив, из которого на каждой итерации выбирать первый элемент, сдвигая остальные на его место (шифтить массив))
Если подсчёт используется. Нафига тогда в строку $clist формировать?
primpil 17.11.2009 15:35 # +1
там $clist используется индусом в дальше в запросе, где и считается количество итемов.
--Может если не выбирать сразу кучу записей...--
да, это, возможно, лучший вариант, если подсчет ведется каждый раз при загрузке страницы. но все равно для нагруженного сайта гораздо лучше предложенный вами вот этот вариант:
--Надо, видимо, где-то хранить уже подсчитанное количество итемов. Которое изменять при добавлении и удалении итема.--
собсно, я перенес код подсчета итемов в отдельный скрипт и убрал там $clist. пока что этот скрипт кроном пару раз в сутки запускается и собранная инфа сохраняется в базу, и потом показываем на странице. не спрашивайте, почему так - там весь проект ужасный. это временное решение, скоро все будет переписываться с нуля.
DanxilLs 05.01.2010 09:08 # 0