[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с выборкой из бд
totje
есть обычная навигация, которую затачиваю под свои нужды:

$elements=45; //неважно
$nums=2; //неважно
$page = intval($_GET['page']);
$x=($page-1)*$nums;
while ($x<$nums*$page)
{
echo $x;
if ($x==$elements) break;
$subscrsubj=mysql_query("SELECT * FROM subj,users WHERE subj.author=users.login and sid='".$subscr[$x]."' ORDER BY rate LIMIT {$start}, {$nums} ");
}

все дело в самом запросе к бд - на второй и более странице он просто не выполняется, НО если выводить $x в цикле или даже $subscr[$x], то все ок, выводится и сам икс, и id темы, которую нужно выбрать :huh:
Почему же тогда сама выборка не осуществляется? На первой странице все нормально..



Спустя 24 минуты, 25 секунд (16.12.2010 - 08:48) twin написал(а):
А нфиг запрос в цикле то?

Спустя 11 минут, 52 секунды (16.12.2010 - 09:00) totje написал(а):
$subscr = explode(",", $sessionrow['subscr']);

ну а в самом поле id тем, на которые юзер подписан.

Спустя 3 часа, 56 минут, 26 секунд (16.12.2010 - 12:56) hellmin написал(а):
$x=($page-1)*$nums;
while ($x<$nums*$page)
//Это тоже самое что и
while (($page-1)*$nums<$nums*$page)

// тут левая часть всегда будет меньше правой

Спустя 7 минут, 9 секунд (16.12.2010 - 13:03) totje написал(а):
hellmin
забыл дописать, что в конце цикла $x++;
он не зацикливается, все нормально выводится, но в пределах первой страницы. почему? ведь при переходе на вторую page становится равно двум и соответственно с базы должны выбираться следующие записи, соответствующие $subscr[$x].
Сам же $subscr[$x] также правильно отображается на всех страницах, но почему выборка из бд то только в пределах первой страницы осуществляется?? wacko.gif

Спустя 6 минут, 1 секунда (16.12.2010 - 13:09) hellmin написал(а):
А как формируется $start

Спустя 10 минут, 15 секунд (16.12.2010 - 13:20) totje написал(а):

$nums = 2; // строк на страницу
if (isset($_GET['page'])) {
$page = intval($_GET['page']);
}
else {
$page = 1;
}
$elements = count($subscr); //строк всего
$pages = ceil($elements/$nums); //страниц всего

if ($page < 1) {
$page = 1;
}
elseif ($page > $pages) {
$page = $pages;
}

$start = ($page-1)*$nums;
if ($start < 0) $start = 0;

вот весь кусок кода на всякий случай

Спустя 1 час, 49 минут, 34 секунды (16.12.2010 - 15:09) hellmin написал(а):
А на сколько тем подписан данный пользователь?..
И если можно то кода по-больше скинуть.

Спустя 23 минуты, 20 секунд (16.12.2010 - 15:33) totje написал(а):
ну в данном случае на 5
окей, вот вообще весь. естественно, лишнее порезал:

$subscr = explode(",", $sessionrow['subscr']);

$nums = 2; // строк на страницу
if (isset($_GET['page'])) {
$page = intval($_GET['page']);
}
else {
$page = 1;
}
$elements = count($subscr); //строк всего
$pages = ceil($elements/$nums); //страниц всего

if ($page < 1) {
$page = 1;
}
elseif ($page > $pages) {
$page = $pages;
}

$start = ($page-1)*$nums;
if ($start < 0) $start = 0;



$x=($page-1)*$nums;
while ($x<$nums*$page)
{
if ($x==$elements) break;
$subscrsubj=mysql_query("SELECT * FROM subj,users WHERE subj.author=users.login AND sid='".$subscr[$x]."' ORDER BY rate DESC LIMIT {$start}, {$nums} ");
$subscrsubjrow = mysql_fetch_array($subscrsubj);
echo $subscr[$x]; // выводит нужныйправильный айди на всех страницах, НО КАКИЕ-ТО НЕВЕДОМЫЕ СИЛЫ МЕШАЮТ выбрать по этому айди инфу с базы, если скрипт выполняется не на первой странице
echo $x; // само собой выводится
echo $subscrsubjrow['author']; //вывод только на 1-й странице, на остальных выборка не работает
echo $subscrsubjrow['subjtext']; //вывод только на 1-й странице, на остальных выборка не работает
$x++;
}
}




echo "<div id='navi'>";
$neighbours = 5; //кол-во соседних страниц
$left_neighbour = $page - $neighbours;
if ($left_neighbour < 1) $left_neighbour = 1;

$right_neighbour = $page + $neighbours;
if ($right_neighbour > $pages) $right_neighbour = $pages;

if ($page > 1) {
print ' <div id="naviprev"><a href="?page=' . ($page-1) . '">&lsaquo;&lsaquo; назад</a> (<a href="?page=1">1</a>)</div>';
}
else echo "<div id='naviprevnoway'>&lsaquo;&lsaquo; назад (...)</div>";
for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
if ($i != $page) {
print ' <span id="navipages"><a href="?page=' . $i . '">' . $i . '</a></span> ';
}
else {
// выбранная страница
print ' <span id="navipage">' . $i . '</span> ';
}
}

if ($page < $pages) {
print ' <div id="navinext">(<a href="?page=' . $pages . '">' . $pages . '</a>) <a href="?page=' . ($page+1) . '">дальше &rsaquo;&rsaquo;</a></div> ';
}
else {echo "<div id='navinextnoway'>(...) дальше &rsaquo;&rsaquo;</div>";}
echo "</div>";

Спустя 1 час, 19 минут, 7 секунд (16.12.2010 - 16:52) hellmin написал(а):
А попробуй вместо второй части вставить вот такое....

$subscrsubj=mysql_query("SELECT * FROM subj,users WHERE subj.author=users.login AND FIND_IN_SET(sid, $sessionrow[subscr]) ORDER BY rate DESC LIMIT {$start}, {$nums} ");
while($subscrsubjrow = mysql_fetch_array($subscrsubj))
{
echo $subscrsubjrow['author']; //вывод только на 1-й странице, на остальных выборка не работает
echo $subscrsubjrow['subjtext']; //вывод только на 1-й странице, на остальных выборка не работает
}

Спустя 5 часов, 26 секунд (16.12.2010 - 21:52) totje написал(а):
hellmin
тогда результаты повторяются на каждой странице - например, на 1й все темы с id=123, на 2й с id=124 итд.. а если вместо $sessionrow[subscr] подставить $subscr[$x], то все также как и было

Спустя 11 часов, 16 минут, 42 секунды (17.12.2010 - 09:09) hellmin написал(а):
А можешь сделать print_r($sessionrow[subscr]) ?
Интересно что там хранится

Спустя 47 минут, 50 секунд (17.12.2010 - 09:57) totje написал(а):
338,339,341,323,321
id тем, которые должны выводиться

убрал условие выборки subj.author=users.login, и все нормально выводится, только без инфы о юзере.. видимо, дело в построении запроса

пока что поставил выборку инфы о юзере в цикл, все работает, но это извращение какое-то, потому любые идеи по решению этой беды приветствуются:)


$subscrsubj=mysql_query("SELECT sid,author,rate,subjtext,tag FROM subj WHERE sid='".$subscr[$x]."' ORDER BY rate DESC LIMIT {$start}, {$nums} ");
$subscrsubjava=mysql_query("SELECT avatar FROM users WHERE login='".$subscrsubjrow['author']."' ");

Спустя 26 минут, 1 секунда (17.12.2010 - 10:23) hellmin написал(а):
В какой еще цикл? Покажи

Спустя 25 минут, 13 секунд (17.12.2010 - 10:48) totje написал(а):
hellmin
ну в этот же, просто вместо одного запроса будет выполняться два.. но это не выход судя по всему

вся проблема была в LIMIT в запросе. он не только был бесполезен, но и мешал в моем условии вывода. достаточно было убрать и все вроде как работает так, как нужно)

Спустя 3 минуты, 22 секунды (17.12.2010 - 10:51) hellmin написал(а):
Так ведь убрали же цикл... откуда он снова появился?
И зачем ты в цикле вытаскиваешь аватарку?

Спустя 5 часов, 37 минут, 37 секунд (17.12.2010 - 16:29) totje написал(а):
hellmin
не заметил второй страницы.
все нормально уже) в пред сообщении отписался
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.