Ru-MaNGOS

Вернуться   Ru-MaNGOS > Флуд > Флудильня

Важная информация

Флудильня Разговоры на любые темы.

Мы устаем постоянно работать. Иногда надо где-то немного отдохнуть. Пожалуйста, не надо здесь устраивать бардак.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2010, 22:39   #1
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию Ограничение в запросе к sql

Задача такова:
Мне нужно сделать деление страницы с новостями на страницы (1, 2, 3, и т.д.).
Новости выводятся из таблицы sql. Новости с hidden=1 не выводятся.
То есть мне нужно сделать так, что бы скажем на первой странице показывало первый десяток новостей с hidden=0, на второй странице показывало второй десяток с hidden=0.

Так как это сделать?
  Ответить с цитированием
Старый 16.03.2010, 23:29   #2
SergiK_KilleR
Пользователь
 
Аватар для SergiK_KilleR
 
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 15
Поблагодарили 53 раз(а) в 14 сообщениях
SergiK_KilleR Скоро придёт к известности
По умолчанию

Код:
SELECT ..... LIMIT 10*(n-1),10;
где n от 1 до ceil(количество_новостей/10)

вот пример:
Код:
# @n - номер текущей страницы
SET @limit = 10;
SET @page_seek = @limit*(@n-1);

SELECT
	*
FROM
	`news_tbl`
WHERE
	`hidden`='0'
ORDER BY `id` ASC LIMIT @page_seek,@limit;

Последний раз редактировалось SergiK_KilleR; 16.03.2010 в 23:43.
SergiK_KilleR вне форума   Ответить с цитированием
Старый 17.03.2010, 06:39   #3
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

Ошибка выходит.. Ему не нравится fetch_array..
"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in x:\home\**.*.*.***\www\****\pages\main.php on line 22"

Код:
<?php
$con = mysql_connect("$host","$user","$pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("$db1", $con);

//$result = mysql_query("SELECT * FROM news WHERE hiden=0 ORDER BY newsid DESC LIMIT 5,2");
$result = mysql_query("
# @n - номер текущей страницы
SET @limit = 10;
SET @page_seek = @limit*(@n-1);
SELECT
	*
FROM
	`news`
WHERE
	`hiden`='0'
ORDER BY `newsid` ASC LIMIT @page_seek,@limit;");
while($row = mysql_fetch_array($result))
  {
  echo "<br /><div class=\"date\"><center> ";
  echo $row['date'];
  echo " </center></div><div class=\"title\"><a href=\"index.php?p=news&k=".$row['newsid']."\"> ";
  echo $row['title'];
  echo " </a></div><br /><div class=\"spacer\">&nbsp;</div><div style=\"padding: 5px 0;\">автор:  ";
  echo $row['autor'];
  echo " &nbsp;  </div><div class=\"content\">";
  echo $row['short'];
  echo "</div><div class=\"spacer-bottom\"></div><br><br><br><br>";
  }

mysql_close($con);
?>
Я так понял, нельзя с таким запросом делать fetch_array..
Помоги пожалуйста ^^
  Ответить с цитированием
Старый 17.03.2010, 06:48   #4
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

В общем я сделал код..
Код:
$result = mysql_query("SELECT * FROM news WHERE hiden=0 ORDER BY newsid DESC LIMIT 0,3");
Где 0 - строка с которой начать, где 3 - сколько взять последующих строк..
Страница на сайте будет определятся по переменной
Код:
$n=$_GET['n'];
Как теперь сделать вывод по 10 новостей на каждей странице..

P.S. В запросе обязательно должно быть DESC LIMIT, а не ASC LIMIT.. Мне же нужно выводить не самую старую новость первой, а самую новую новость.
  Ответить с цитированием
Старый 17.03.2010, 07:24   #5
SergiK_KilleR
Пользователь
 
Аватар для SergiK_KilleR
 
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 15
Поблагодарили 53 раз(а) в 14 сообщениях
SergiK_KilleR Скоро придёт к известности
По умолчанию

Код:
<?php
$n=(int) $_GET['n'];
$limit = 10;
$page_seek = $limit*($n-1);
$result = mysql_query("SELECT * FROM news WHERE hiden=0 ORDER BY newsid DESC LIMIT $page_seek,$limit");
?>
DESC относится не к LIMIT, а к ORDER BY

Последний раз редактировалось SergiK_KilleR; 17.03.2010 в 07:37.
SergiK_KilleR вне форума   Ответить с цитированием
Старый 17.03.2010, 13:02   #6
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

Теперь ошибка такова:
Код:
Notice: Undefined index: n in x:\home\10.0.1.199\www\rock\pages\main.php on line 9

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in x:\home\10.0.1.199\www\rock\pages\main.php on line 27
Сам код:
Код:
$n=(int) $_GET['n'];
if (isset($n)) {
$limit = 10;
$page_seek = $limit*($n-1);
} else { $pageseek=1; $limit=10; }

$result = mysql_query("SELECT * FROM news WHERE hiden=0 ORDER BY newsid DESC LIMIT $page_seek,$limit");
  Ответить с цитированием
Старый 17.03.2010, 14:18   #7
SergiK_KilleR
Пользователь
 
Аватар для SergiK_KilleR
 
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 15
Поблагодарили 53 раз(а) в 14 сообщениях
SergiK_KilleR Скоро придёт к известности
По умолчанию

Цитата:
Notice: Undefined index: n in x:\home\10.0.1.199\www\rock\pages\main.php on line 9
этим всё сказанно)) кто за вас будет передовать параметр $_GET['n'] ?

замените
Код:
$n=(int) $_GET['n'];
на
Код:
$n=(isset($_GET['n'])) ? (int) $_GET['n'] : 1;

Последний раз редактировалось SergiK_KilleR; 17.03.2010 в 16:27.
SergiK_KilleR вне форума   Ответить с цитированием
Старый 17.03.2010, 16:01   #8
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

Ну ошибка с фетчем не решилась..
Код:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in x:\home\10.0.1.199\www\rock\pages\main.php on line 27
Вот код:

Код:
$n=(isset($_GET['n'])) ? (int) $_GET['n'] : 0;

$limit = 10;
$page_seek = $limit*($n-1);

$result = mysql_query("SELECT * FROM news WHERE hiden=0 ORDER BY newsid DESC LIMIT $page_seek,$limit");

while($row = mysql_fetch_array($result))
  {
  echo "<br /><div class=\"date\"><center> ";
  echo $row['date'];
  echo " </center></div><div class=\"title\"><a href=\"index.php?p=news&k=".$row['newsid']."\"> ";
  echo $row['title'];
  echo " </a></div><br /><div class=\"spacer\">&nbsp;</div><div style=\"padding: 5px 0;\">автор:  ";
  echo $row['autor'];
  echo " &nbsp;  </div><div class=\"content\">";
  echo $row['short'];
  echo "</div><div class=\"spacer-bottom\"></div><br><br><br><br>";
  }
  Ответить с цитированием
Старый 17.03.2010, 16:07   #9
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Добавь выделенное красным
Код:
$n=(isset($_GET['n'])) ? (int) $_GET['n'] : 0;

$limit = 10;
$page_seek = $limit*($n-1);

$result = mysql_query("SELECT * FROM news WHERE hiden=0 ORDER BY newsid DESC LIMIT $page_seek,$limit");

if(!$result)
    exit('SQL query failed!');

while($row = mysql_fetch_array($result))
  {
  echo "<br /><div class=\"date\"><center> ";
  echo $row['date'];
  echo " </center></div><div class=\"title\"><a href=\"index.php?p=news&k=".$row['newsid']."\"> ";
  echo $row['title'];
  echo " </a></div><br /><div class=\"spacer\">&nbsp;</div><div style=\"padding: 5px 0;\">автор:  ";
  echo $row['autor'];
  echo " &nbsp;  </div><div class=\"content\">";
  echo $row['short'];
  echo "</div><div class=\"spacer-bottom\"></div><br><br><br><br>";
  }
LordJZ вне форума   Ответить с цитированием
Старый 17.03.2010, 16:20   #10
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

Да, выдало ошибку с запросом.. Странно.. Чё не так?
  Ответить с цитированием
Старый 17.03.2010, 16:25   #11
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

Вот ещё кое что:
Только что вместе с ошибкой написал
Код:
if(!$result)
    echo $page_seek."<br><br>";
    echo $limit;
    exit('SQL query failed!');
Получилось, что
Код:
$page_seek = -10 (так не должно быть)
$limit = 10 (всё правильно)
  Ответить с цитированием
Старый 17.03.2010, 16:29   #12
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

Ну так всё правильно..
Получается $n=0
И при выполнении уравнения $page_seek = $limit*($n-1);
Получается
$page_seek = 10*(0-1) = 10*(-1) = -10
  Ответить с цитированием
Старый 17.03.2010, 16:35   #13
SergiK_KilleR
Пользователь
 
Аватар для SergiK_KilleR
 
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 15
Поблагодарили 53 раз(а) в 14 сообщениях
SergiK_KilleR Скоро придёт к известности
По умолчанию

ну наверно надо внимательней быть, иногда и в чужом коде бывают ошибки.недочёты




ADD: уже сам решил проблему))
SergiK_KilleR вне форума   Ответить с цитированием
Старый 17.03.2010, 16:41   #14
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

Код:
SQL query failed!
И $page_seek не хочешь показывать. Всё стало норм.. $limit=10, $n=1, но $page_seek не выводит.. Его просто навсего не существует.. Как так?) Даже если ставить 2, то его не выводит
  Ответить с цитированием
Старый 17.03.2010, 17:31   #15
Eisenheim
Гость
 
Сообщений: n/a
По умолчанию

А нет.. С page_seek всё в норме.. Простите меня, виноват. Но ошибка с sql запросом не решена. SQL query failed!

ADD:
Всё работает! Просто нужно было убрать
Код:
if(!$result)
    exit('SQL query failed!');
Всем спасибо за помощь..

P.S. Мну ещё поиск и регистрацию делать.. Думаю на долго не прощаемся
  Ответить с цитированием
Ответ

Метки
sql


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать ограничение на статы Lemex Корзина 5 15.08.2010 12:48
Ограничение на использование игровой почты. Greshnikk Новичкам 0 07.06.2010 14:27
[9979][patch] Ограничение для арены Insider42 Принятые патчи 1 26.05.2010 23:37
Ограничение значений в БД selector Новичкам 15 28.04.2010 20:50


Текущее время: 08:42. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot