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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как красиво расставить first even odd last, при выборке из db 
:(
    Опции темы
KuZyagroup
Дата 8.5.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


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

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



Допустим есть какая то выборка из дб(в моём случае by drupal)
Код

<?php
$result = db_query("SELECT * AS * FROM * WHERE * ORDER BY * ASC");
//которая циклически выводиться
while ($row = db_fetch_object($result)) { 
?>
<tag class=""> ... </tag>
<?php } ?>

Как красиво повесить first, even, odd, last в class. Допустим введение счетчика решает первых три класса, а что делать с last?
PM MAIL   Вверх
ksnk
Дата 8.5.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Извернуццо!
Код

set @max :=  (select count(*)  from catalogs);
set @a:=0;
select (@a:=@a+1) as cnt,
(@a=1) as first, (@a=@max) as last,
(@a & 1) as odd,
t.* from (
select *
from catalogs
order by name
)
as t;

если на PHP,то примерно так
Код

$sql1='set @max:=(select count(*) from catalogs);';
$sql2='set @a:=0;';
$sql3='select (@a:=@a+1) as cnt,
(@a=1) as first, (@a=@max) as last,
(@a & 1) as odd,
t.* from (
select * from catalogs
order by name
)
as t;';
$result = db_query($sql1);
$result = db_query($sql2);
$result = db_query($sql3);

while ...
 

Фишка в том, чтобы запрос "с сортировкой" был подзапросом, иначе приём с переменными MySql будет не так полезен. 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KuZyagroup
Дата 9.5.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


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

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



А точно нет способа попроще?(просто у меня не один конкретный запрос, а скорее типичный случай)
Ибо если это самый простой способ то легче JS по загрузке страницы запустить который все сам разметит

П.С. Можно ещё сделать row0, row1 и вместо while пустить do ... while но этот метод мне кажется кривоватым(
PM MAIL   Вверх
ksnk
Дата 9.5.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



KuZyagroup, А чем "сложность"? ничего менять в цикле while уже не надо. "Один конкретный запрос" (строки 7-8 моего примера) оборачивается в "скобки" - (1-6 --- 9-12) и все. Функцию написать для "типичного случая". smile Все необходимые для жизни переменные уже расставлены. 

При использовании "пассивных шаблонов" - чуть ли не единственный приличный выход.

Я примерно такую задачу решал только для массива. end - чтобы пометить последний элемент массива, остальное - просто, первый и пересчет.

Для явной работы с записями mysql_num_rows - число записей в запросе, не знаю как оно в друпале... Красоты особой все равно не навести, будет все примерно так:
Код

$maxrow=mysql_num_row($...);
$cnt=0;
while {?>

<tr class="<?=$cnt++ &1?'odd':'even'?><?=$cnt==1?' first':''?><?=$cnt==$maxrow?' last':''>">
<td>...
</tr>

<?php}?>
 

Это сообщение отредактировал(а) ksnk - 9.5.2009, 10:56


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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