|
msweb
«МастерВеб»

Зарегистрирован: 2006-05-26
Сообщений: 17
|
Необходимо выводить "+" в меню, для разделов имеющих подразделы.
Проверку наличия подразделов у каждого пункта меню провожу следующим образом:
Код:
$browse_sub[2][unactive] = "
<a href='%URL'>%NAME</a>".opt_case(listQuery("SELECT COUNT(*) as count FROM Subdivision WHERE Parent_Sub_ID= $data[$i][Subdivision_ID] ", "$data[count]"), "<span>+</span>", "") . "
";
Получаю, что подразделов нет ни в одном разделе, хотя это не так.
P.S.
если в "$data[count]" экранировать $ (\$data[count]) - получаю, что во всех разделах есть подразделы, что также неверно.
msweb
|
|
DiGGy
DiGGy

Зарегистрирован: 2005-04-04
Сообщений: 1546
|
Фигню делаете:
1. Забудьте про opt_case(). Используйте тернарный оператор: выражение1? выражение2: выражение3 (см. тут)
2. listQuery тут тоже не айс, лучше заменить на $db->get_var()
3. sql запрос - вам нужен факт наличия хоть одного подкаталога, а не их кол-ва, поэтому использовать count недопустимо, ибо происходит полный перебор всех данных без использования каких-либо индексов, что просто подвесит вашу базу, если разделов будет оч. много. Как минимум надо добавить в запрос "limit 1". Также надо учесть, чтобы выключенные разделы не попадали в эту выборку, т.е. Checked=1.
4. Что такое экранирование и как оно конкретно в данном случае работает - вы понятия вижу не имеете, а оч. зря.
Верное решение (запрос указал другой - он на 1-2 порядка быстрее вашего работает):
Код:
$browse_sub[2][unactive] = "<a href='%URL'>%NAME</a>\".(\$db->get_var(\"select ifnull(exists (select null from `Subdivision` where `Checked`=1 and `Parent_Sub_ID`={\$data[\$i][Subdivision_ID]}),0)\")?'<span>+</span>':null).\"";
зы. И обновите ваш маствеб.ру, ведь 3.55 небезопасная... )
Temet nosce...
|