Кусок кода работает без проблем, но по-моему, не совсем красиво выглядит, даже немного запутано. PHP: <?php $lim=4; $query="SELECT albums.artist, albums.type, albums.album, albums.size, albums.id, albums.list, albums.clicks, types.type_name, types.user_visible, types.id FROM albums LEFT JOIN types ON (albums.type=types.id) WHERE types.user_visible='true'"; if (isset($_GET['page'])){ # Отображаемая страница $page=$_GET['page']; } else { $page=0; } function inc($ag){ $ag++; return $ag; } ###################################################################################### # # # Смещение запроса базы данных # # # ###################################################################################### function getofs () { GLOBAL $c, $lim, $page, $pages, $page_count; $pages=sqlite_fetch_single($c); $page_count=ceil($pages/$lim); if ($page<0) { $page=0; } else { if ($page>$page_count) {$page=$page_count-1;} } $ofs=$page*$lim; return $ofs; } #--------------------------------------------------------------------------- # Если запрос на артиста #--------------------------------------------------------------------------- if (!empty($_GET['artist'])) { $c=sqlite_query ($id, "SELECT COUNT(*) from albums LEFT JOIN types ON (albums.type=types.id) WHERE albums.artist='$artist' AND types.user_visible='true'"); $ofs=getofs(); $artist=$_GET['artist']; $query=$query." AND albums.artist='$artist' LIMIT $lim OFFSET $ofs"; $post_title="<b>$artist</b>"; $qs="musik.htm?artist=".rawurlencode($artist); } #--------------------------------------------------------------------------- # Если запрос на жанр #--------------------------------------------------------------------------- if (!empty($_GET['types'])) { $c=sqlite_query ($id, "SELECT COUNT(*) from albums LEFT JOIN types ON (albums.type=types.id) WHERE types.type_name='$types' AND types.user_visible='true'"); $ofs=getofs(); $type=$_GET['types']; $query=$query." AND types.type_name='$types' LIMIT $lim OFFSET $ofs"; $post_title="<b>$types</b>"; $qs="musik.htm?types=".rawurlencode($types); } #------------------------------------------------------------------------------ if ($pages) { ............... Выводим содержимое for ($r=0; $r<$page_count; $r++) { echo "<li><a href='$qs&page=$r'>".inc($r)."</a> \n</li> \n"; # ССылки на страницы } } else { Ошибка, ресурс не найден } Меня смущает то, что оба запроса почти одинаковы, . Отсюда вопросы: Стоит ли вынесты его в функцию? Если да, то как это сделать?
В конкретном этом случае скорее всего не стоит. Хотя, возможно стоит сделать функции getGenre() и getArtist() которые будут выбирать жанр и исполнителя, т.к. это у тебя наверное будет много где юзаться.
PHP: <?php for ($r=0; $r<$page_count; $r++) { echo "<li><a href='$qs&page=$r'>".inc($r)."</a> \n</li> \n"; # ССылки на страницы } Меняем на PHP: <?php $r = 0; while($r < $page_count){ echo "<li><a href='$qs&page=$r'>".++$r."</a> \n</li> \n"; # ССылки на страницы } И читаем про инкремент/декремент главу в мануале http://lv.php.net/manual/ru/language.op ... rement.php а так же главу про циклы и их виды: http://lv.php.net/manual/ru/control-str ... .while.php http://lv.php.net/manual/ru/control-str ... .while.php http://lv.php.net/manual/ru/control-structures.for.php http://lv.php.net/manual/ru/control-str ... oreach.php
А если юзер ввел и жанр и артиста то что у тебя выведется? Имхо, стоит выделить запрос $query= [sql] SELECT COUNT(*) from albums LEFT JOIN types ON (albums.type=types.id) WHERE types.user_visible='true'[/sql] и в зависимости от того, что тебе пришло формировать добавку к WHERE и уже его приделывать к запросу. PHP: $query.=!empty($_GET['artist'])?:"AND albums.artist='$artist'":""; $query.=!empty($_GET['types'])?:" AND types.type_name='$types'":""; $c=sqlite_query ($id, $query) или даже сразу PHP: <?php $query = "SELECT COUNT(*) from albums LEFT JOIN types ON (albums.type=types.id) WHERE types.user_visible='true'". !empty($_GET['artist'])?:"AND albums.artist='$artist'":"" . !empty($_GET['types'])?:" AND types.type_name='$types'":"";