[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Предыдущая запись в бд (mysql)
5maks5
Здравствуйте. Необходимо вытаскивать id предыдущей записи в бд, с определённым условием.

Имею такую структуру бд:
user posted image

~Код:
<?php

/**
*
@author Celsoft
*
@copyright 2012
*/


if (!defined('CELSOFT')) {
die("Access Denied!");
}

$category = intval($_REQUEST['category']);

$row = $db->super_query( "SELECT * FROM posts WHERE category = '$category' ORDER BY id DESC" );

?>

Если $category == 4, то запрос отдаст мне запись с id = 12. Это всё что я имею, но при этом мне нужно как-то узнать id предыдущей записи в бд с $category == 4. При правельном коде в данном случае это будет строка с id = 9.

Час уже сижу ломаю голову. Буду очень благодарен за помощь.



Спустя 1 час, 49 минут, 40 секунд (27.05.2012 - 15:54) inpost написал(а):
LIMIT 1,1

Спустя 2 часа, 33 минуты, 33 секунды (27.05.2012 - 18:27) 5maks5 написал(а):
Цитата (inpost @ 27.05.2012 - 12:54)
LIMIT 1,1

Не работает.

Вот мой код целиком:

Функции обращения в базу:
    function super_query($query, $multi = false) {

if (!$multi) {

$this->query($query);
$data = $this->get_row();
$this->free();
return $data;
} else {
$this->query($query);

$rows = array();
while ($row = $this->get_row()) {
$rows[] = $row;
}

$this->free();

return $rows;
}
}


function query($query, $show_error=true) {
$time_before = $this->get_real_time();
mysql_query("SET NAMES UTF8;");
if (!$this->connected)
$this->connect(DBUSER, DBPASS, DBNAME, DBHOST);

if (!($this->query_id = mysql_query($query, $this->db_id) )) {

$this->mysql_error = mysql_error();
$this->mysql_error_num = mysql_errno();

if ($show_error) {
$this->display_error($this->mysql_error, $this->mysql_error_num, $query);
}
}


$this->MySQL_time_taken += $this->get_real_time() - $time_before;

$this->query_num++;

return $this->query_id;
}

function get_row($query_id = '') {
if ($query_id == '')
$query_id = $this->query_id;

return mysql_fetch_assoc($query_id);
}

function free($query_id = '') {

if ($query_id == '')
$query_id = $this->query_id;

@mysql_free_result($query_id);
}


Файл:

<?php

/**
*
@author Celsoft
*
@copyright 2012
*/


if (!defined('CELSOFT')) {
die("Access Denied!");
}

$category = intval($_REQUEST['category']);
$next = intval($_REQUEST['next']);

if ( $category == 0 or !$category ){
$where = "WHERE moder = '1'";
}else{
$where = "WHERE category = '$category' AND moder = '1'";
}

if ( $next == 0 or !$next ){
$next_post = '';
}else{
$next_post = "AND id = '$next'";
}

$row = $db->super_query( "SELECT * FROM posts $where $next_post ORDER BY id DESC", true );
$db->query( "UPDATE posts SET views=views+1 where id='{$row['id']}'" );
$count = $db->super_query( "SELECT COUNT(*) as count FROM posts" );

echo '<pre>';
print_r($row);
echo '</pre>';

$next_link = $row[1]['id'];

if ( $row[0]['id'] ){

$tpl->load_template( 'read.tpl' );
$tpl->set( '{date}', $row[0]['date'] );
$tpl->set( '{count}', $count['count'] );
$tpl->set( '{category}', get_cat($row[0]['category']) );
$tpl->set( '{cat-id}', $category );
$tpl->set( '{rating}', ShowRating( $row[0]['id'], $row[0]['rating'], $row[0]['vote_num'], 1 ) );
$tpl->set( '{views}', $row[0]['views'] );
$tpl->set( '{next}', $config['url'] . "index.php?do=read&category=$category&next=$next_link" );
$tpl->set( '{text}', $row[0]['text'] );
$tpl->compile( 'content' );

}else{

msgbox("Внимание, обнаружена ошибка", "Такого сообщения не существует.");

}

?>

Спустя 14 минут, 31 секунда (27.05.2012 - 18:42) inpost написал(а):
а я не вижу этого в коде. И вообще, что значит LIMIT 1,1 ? Почему 2 аргумента?

Спустя 18 часов, 46 минут, 50 секунд (28.05.2012 - 13:29) 5maks5 написал(а):
Ты же посоветовал такой лимит..

Спустя 1 час, 56 минут, 35 секунд (28.05.2012 - 15:25) inpost написал(а):
Так я и спросил, чтобы ты ответил:
И вообще, что значит LIMIT 1,1 ? Почему 2 аргумента?

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

Спустя 12 минут, 4 секунды (28.05.2012 - 15:37) 5maks5 написал(а):
Первый параметр с какой записи, а второй сколько.
Но ведь я не знаю какой номер у предыдущей записи. Поэтому и запостил сюда. С такой задачей сталкивался, но только структура базы была специально заточена под эту функцию проекта. А здесь уже структуру базы менять не вариант. Слишком много придётся переписывать.

Спустя 2 минуты, 38 секунд (28.05.2012 - 15:40) inpost написал(а):
В твоей задаче подойдет. Сделай обычную выборку, убери лишний код и покажи, что конкретно не работает?

Спустя 10 минут, 35 секунд (28.05.2012 - 15:50) 5maks5 написал(а):
Спасибо. Оставлю на заметку. На самом деле я сделал немного иначе.
Теперь другая проблема.
Если делать выборку по category AND id, можно как-то узнать id предыдущей записи в той же категории? Без AND id всё работает как часы, а если с AND id то запрос получается достаёт только одну запись с id=x.

Спустя 4 минуты, 36 секунд (28.05.2012 - 15:55) inpost написал(а):
5maks5
Иначе - неправильно... лучше бы код показал и всё сделал так, как надо...

А вопроса нового не понял... ты говоришь ID=5, и находишь ID=5, что не нравится - не понимаю.

Спустя 10 минут, 13 секунд (28.05.2012 - 16:05) 5maks5 написал(а):
Цитата (inpost @ 28.05.2012 - 12:55)
5maks5
Иначе - неправильно... лучше бы код показал и всё сделал так, как надо...

А вопроса нового не понял... ты говоришь ID=5, и находишь ID=5, что не нравится - не понимаю.

Пример:
Имеем страницу вида site.com/?cat=4&id=5 на этой странице мы выводим запись из категории с номером 4 и которой присвоен id 5. На это же странице мне необходимо вывести ссылку на страницу на которой будет выводиться предыдущая запись из категории 4. Ссылка уже будет иметь примерно такой вид на другую страницу: site.com/?cat=4&id=2.
Тобишь в ссылку в id= нужно подставлять id предыдущей записи из этой же категории. Но вот как его узнать я пока не могу понять.

Спустя 3 минуты, 8 секунд (28.05.2012 - 16:08) inpost написал(а):
сделать SELECT как я сказал!!! Я ни на шаг не приближусь к решению, пока ты сам не напишешь код выборки...

Спустя 2 минуты, 56 секунд (28.05.2012 - 16:11) 5maks5 написал(а):
Ты опять меня не понял. Смысл ставить лимиты есть выборка идёт по id? Это индивидуальное значение записи в бд и от того что выставить лимиты запрос больше записей отдавать не будет и будет ворачивать именно ту запись id которой указан в запросе..

Спустя 1 час, 15 минут, 46 секунд (28.05.2012 - 17:27) inpost написал(а):
Зачем ID указывать в данном случае как =, когда есть такие операторы как > или <

Спустя 2 минуты, 35 секунд (28.05.2012 - 17:30) 5maks5 написал(а):
Глянь на скрин таблицы. Там нет смысла уменьшать id.

Спустя 9 минут, 33 секунды (28.05.2012 - 17:39) inpost написал(а):
Ну не хочешь - кто тебе доктор. Я уже раз 5 пытаюсь из тебя выжать ответ, чтобы помощь решить твою проблему... такое чувство, что это мне надо, а не тебе...

Спустя 2 минуты, 5 секунд (28.05.2012 - 17:41) 5maks5 написал(а):
Я так говорю потому что пробовал всё это перед тем как запостить сюда. Кроме лимитов конечно. Но тут уже другой вопрос.

Спустя 3 минуты, 25 секунд (28.05.2012 - 17:45) inpost написал(а):
Ты не пробовал, увы. Я дал ответ, а ты не можешь его сделать, хотя он полностью отвечает твоим требованиям


_____________
Где исходники вселенной?
Быстрый ответ:

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