Помогите с mysql вывод соседних значений.

Статус
В этой теме нельзя размещать новые ответы.

Mr.Friction

Старатель
Регистрация
14 Ноя 2006
Сообщения
176
Реакции
12
Сразу скажу в MySQL я тупо 0.
Собственно как-бы описать...

Есть каталог компаний есть вот такой запрос

PHP:
$sql22=("SELECT * FROM ". $db_prefix ."messages where category=$category order by id DESC limit 0,15");

После которого выводим 15 записей из категории $category с 0-й строки...

у каждой компании есть свой id ($id) мне нужно чтоб выводило не с начала (типа 15 последних компаний) а 15 близлежащих тоесть если у компании $id=2222 то чтоб выводило 2221, 2220, 2219, 2218 и т.д.

или например по 7 в2-х направлениях (тоесть 2221, 2220, 2219, 2218.... и соотвественно 2223, 2225, 2226, 2227...)

как такое чудо сделать?

На всякий случай напишу всю функцию

PHP:
$sql22=("SELECT * FROM ". $db_prefix ."messages where category=$category order by id DESC limit 0,15");
$sel_an22=mysql_query("$sql22");
while($an=mysql_fetch_array($sel_an22)) {
$aid=$an["id"];
$atitle=$an["title"];
$adesc=$an["desc"];
$acategory=$an["category"];

echo "<a href=/kompaniya/$aid ><b>$atitle</b></a><br />";
}
 
Добавь в условие where помимо category=$category еще и id>$id - выведет статьи с большим id, чем у нашей.

Если хочешь в обе стороны, можно
where id > ($id-7) AND id != $id

выведет от $id-7 до сколько там у тебя LIMIT, исключая саму статью.
 
  • Заблокирован
  • #3
where id between $id-7 and $id+7 and $id <> id
 
Прошу прощения за тупость, но кто-то может полностью написать эту строку как она должна быть ?
PHP:
$sql22=("SELECT * FROM ". $db_prefix ."messages where category=$category order by id DESC limit 0,15");
просто какую-то хрень выдаёт

а если написать
PHP:
$sql22=("SELECT * FROM ". $db_prefix ."messages where category=$category id>$id order by id DESC limit 0,15");
вообще ничё не выводит
 
PHP:
$sql22=("SELECT * FROM ". $db_prefix ."messages where category='$category' AND id > ($id-7) AND id != $id AND id < ($id+7) order by id DESC");


Понятно что выше по коду нужно установить нужный ид. Вот эти -7 +7 лучше кодить в переменной, но это так, мелочи)
 
не хочет.....
вот такое заработало
PHP:
$sql22=("SELECT * FROM ". $db_prefix ."messages where category='$category' AND id < $id order by id DESC limit 0,10");


а такое
PHP:
$sql22=("SELECT * FROM ". $db_prefix ."messages where category='$category' AND id > ($id-7) AND id != $id AND id < ($id+7) order by id DESC");

не хочет
 
Специально создал у себя простенькую базу с одной табличкой, прогнал скрипт - пашет именно в таком виде в каком я запостил, может там в кавычках проблемка
Попробуй так
$sql22=("SELECT * FROM ". $db_prefix ."messages where `category`='$category' AND `id` > '$id'-7 AND `id` != '$id' AND `id` < '$id'+7 order by `id` DESC");

Вот весь скрипт, у меня работает (и в первоначальном виде, и в этом тоже)
Код:
<?php
  function connect( $dbName )
  {
      $databaseResponse = mysql_connect("localhost", "******", "******" );
	  $selectResult = mysql_select_db( $dbName ) or dieFunc();
  }

  function executeQuery( $query, $db )
  {
      if( $db != "" ) connect( $db );

      $result= mysql_query( $query );
      $err   = mysql_error();
      if( $err != "" ) echo "error=$err  ";
      mysql_close();
      return $result;
  } 
  
$id = 16;
$category="cat1";
$db_prefix = "table1";
$sql22=("SELECT * FROM ". $db_prefix ."messages where `category`='$category' AND `id` > '$id'-7 AND `id` != '$id' AND `id` < '$id'+7 order by `id` DESC");
$sel_an22=executeQuery("$sql22","cat1");
while($an=mysql_fetch_array($sel_an22)) 
{
$aid=$an["id"];
$atitle=$an["title"];
$adesc=$an["desc"];
$acategory=$an["category"];

echo "<a href=/kompaniya/$aid ><b>$atitle</b></a><br />";
}
?>
 
спасибо теде добрый человек....

Другой вопрос.....
Мне кажется, что оно не пашет из-за того, что ID в данной категории могут не быть на 7 вперед и на 7 назад.
Тоесть ид - это общее а в определенной категории может быть промежуток в ид.
поставил `id` > '$id'-50 AND `id` != '$id' AND `id` < '$id'+50 а стало что-то выводить :)
 
ID в данной категории могут не быть на 7 вперед и на 7 назад, это понятно, но SQL языку конкретный случай пофигу, ты просто ставишь любое условие по ид, выполняется оно или нет зависит от данных, а не от запроса.
 
Вот в том-то и дело что по другому не хочет пахать.....
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху