Показване на предишни и следващи

d_badboy

Registered
Как мога да взема 2 записа преди и 2 след този който се извежда в момента от дадена таблица, като id се предава по url като $_GET['id']
 
http://web-tourist.net/forum/viewtopic.php?t=82559&highlight=
Като на мястото на LIMIT 1 Слагаш LIMIT 2
 
Получава се нещо странно. При предишните показва на обратно. Ето вижте при разглеждане на изображенията тук. Понеже новите се показват първо аз искам по големите id-та да са първо. Моля помогнете ми
Код:
$prev_next = "<table style=\"margin: 0px auto;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>\n";
$query_prev = @mysql_query("SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." ORDER BY `img_id` ASC LIMIT 0,2");
if (@mysql_num_rows($query_prev)>0) {
   while ($prev = mysql_fetch_assoc($query_prev)) {
      $image_load[] = $prev['img_id'];

      $prev_next.= "<td>";
      $prev_next.= "<div class=\"img\" onmouseover=\"this.className='img_hover'\" onmouseout=\"this.className='img'\">";
      $prev_next.= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"3\">";
      $prev_next.= "<tr><td width=\"120\" height=\"120\" style=\"border: 1px solid #e2e2e2\" align=\"center\" valign=\"center\"><a href=\"".create_url("action=view&id=".$prev['img_id'],$_SERVER["PHP_SELF"])."\" title=\"Показване на изображението\" id=\"image_".$prev['img_id']."\"></a></td></tr>\n";
      $prev_next.= "<tr><td><b>Име</b><br />\n".cut_string($prev['img_name'],$short_name)."<br />\n<b>Големина</b><br />".return_format($prev['img_size'])."<br />\n<b>Резолюция</b><br />\n".$prev['img_width']."x".$prev['img_height'];
      $prev_next.= "</td></tr></table>\n</div>\n</td>\n";
   }
}

$query_next = @mysql_query("SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." ORDER BY `img_id` DESC LIMIT 0,2");
if (@mysql_num_rows($query_next)>0) {
   while ($next = mysql_fetch_assoc($query_next)) {
      $image_load[] = $next['img_id'];

      $prev_next.= "<td>";
      $prev_next.= "<div class=\"img\" onmouseover=\"this.className='img_hover'\" onmouseout=\"this.className='img'\">";
      $prev_next.= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"3\">";
      $prev_next.= "<tr><td width=\"120\" height=\"120\" style=\"border: 1px solid #e2e2e2\" align=\"center\" valign=\"center\"><a href=\"".create_url("action=view&id=".$next['img_id'],$_SERVER["PHP_SELF"])."\" title=\"Показване на изображението\" id=\"image_".$next['img_id']."\"></a></td></tr>\n";
      $prev_next.= "<tr><td><b>Име</b><br />\n".cut_string($next['img_name'],$short_name)."<br />\n<b>Големина</b><br />".return_format($next['img_size'])."<br />\n<b>Резолюция</b><br />\n".$next['img_width']."x".$next['img_height'];
      $prev_next.= "</td></tr></table>\n</div>\n</td>\n";
   }
}
$prev_next.= "</td></tr></table>";
 
$query_prev = @mysql_query("SELECT * FROM `images` WHERE `img_id`< ".$_GET['id']." ORDER BY `img_id` ASC LIMIT 0,2");
if (@mysql_num_rows($query_prev)>0) {
while ($prev = mysql_fetch_assoc($query_prev)) {
$image_load[] = $prev['img_id'];

$prev_next.= "<td>";
$prev_next.= "<div class=\"img\" onmouseover=\"this.className='img_hover'\" onmouseout=\"this.className='img'\">";
$prev_next.= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"3\">";
$prev_next.= "<tr><td width=\"120\" height=\"120\" style=\"border: 1px solid #e2e2e2\" align=\"center\" valign=\"center\"><a href=\"".create_url("action=view&id=".$prev['img_id'],$_SERVER["PHP_SELF"])."\" title=\"Показване на изображението\" id=\"image_".$prev['img_id']."\"></a></td></tr>\n";
$prev_next.= "<tr><td><b>Име</b><br />\n".cut_string($prev['img_name'],$short_name)."<br />\n<b>Големина</b><br />".return_format($prev['img_size'])."<br />\n<b>Резолюция</b><br />\n".$prev['img_width']."x".$prev['img_height'];
$prev_next.= "</td></tr></table>\n</div>\n</td>\n";
}
}

$query_next = @mysql_query("SELECT * FROM `images` WHERE `img_id`> ".$_GET['id']." ORDER BY `img_id` DESC LIMIT 0,2");
if (@mysql_num_rows($query_next)>0) {
while ($next = mysql_fetch_assoc($query_next)) {
$image_load[] = $next['img_id'];

$prev_next.= "<td>";
$prev_next.= "<div class=\"img\" onmouseover=\"this.className='img_hover'\" onmouseout=\"this.className='img'\">";
$prev_next.= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"3\">";
$prev_next.= "<tr><td width=\"120\" height=\"120\" style=\"border: 1px solid #e2e2e2\" align=\"center\" valign=\"center\"><a href=\"".create_url("action=view&id=".$next['img_id'],$_SERVER["PHP_SELF"])."\" title=\"Показване на изображението\" id=\"image_".$next['img_id']."\"></a></td></tr>\n";
$prev_next.= "<tr><td><b>Име</b><br />\n".cut_string($next['img_name'],$short_name)."<br />\n<b>Големина</b><br />".return_format($next['img_size'])."<br />\n<b>Резолюция</b><br />\n".$next['img_width']."x".$next['img_height'];
$prev_next.= "</td></tr></table>\n</div>\n</td>\n";
}
}
$prev_next.= "</td></tr></table>";
Объркал си знаците :D:D Сложил си > вместо < и обратното
 
Знаците нарочно са така, но ето обърнах ги и пак не е правилно извеждането. Погледни отново ако може :cry:
Код:
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." ORDER BY `img_id` DESC LIMIT 0,2
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." ORDER BY `img_id` ASC LIMIT 0,2
 
Същото е . Проблема е там че когато са така ако в момента се извежда id 60,
Код:
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." ORDER BY `img_id` DESC LIMIT 2
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." ORDER BY `img_id` ASC LIMIT 2
се показват 59,58,61,62 вместо 58,59,61,62
А когато са така
Код:
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." ORDER BY `img_id` ASC LIMIT 2
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." ORDER BY `img_id` DESC LIMIT 2
61,62,59,58 вместо 62,61,59,58
 
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." DESK LIMIT 2
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." DESK LIMIT 2
А така дали няма да стане ???
Да не ги подрежда по id
 
Код:
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." DESK LIMIT 2
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." DESK LIMIT 2
Показва 59,58,75,74

Код:
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." АSK LIMIT 2
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." АSK LIMIT 2
Показва 1,2,61,62
 
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." DESK LIMIT 2
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." ORDER BY `img_id` DESC LIMIT 2
Така вече би трябвало да стане
Или така
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." DESK LIMIT 2
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." АSK LIMIT 2
 
С PHP няма ли да стане по някакъв начин когато се изличат всички записи с while цикъла да се вземат само 2 преди и 2 след ?
 
SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." ORDER BY `img_id` ASC LIMIT 2
SELECT * FROM `images` WHERE `img_id`>".$_GET['id']." ORDER BY `img_id` ASC LIMIT 2

ASC - възходящ ред (първо по-малките 1, 2, 3)
DESC - низходящ ред (първо по-големите 3, 2, 1)
 
d_badboy каза:
StormBreaker в момента заявките са абсолютно същите погледни
За предишни показва 1,2 :lol:

Да, то взима първите, които реално са по-малки. Може да пробваш това :)

SELECT * FROM (SELECT * FROM `images` WHERE `img_id`<".$_GET['id']." ORDER BY `img_id` DESC LIMIT 2) ORDER BY `img_id` ASC

или да го направиш с PHP

$ar = array();
while ( $row = mysql_fetch_assoc($...) )
$ar[] = $row;

$ar = array_reverse($ar);

и иззвеждаш. :)
 
Използвах по мързеливия вариант array_reverse() и се получи. Благодаря ви за помощта :)
 

Back
Горе