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

Тема в разделе "Базы данных", создана пользователем Mr.Friction, 23 июл 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Mr.Friction

    Mr.Friction

    Регистр.:
    14 ноя 2006
    Сообщения:
    176
    Симпатии:
    10
    Сразу скажу в 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 />";
    }
     
  2. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Добавь в условие where помимо category=$category еще и id>$id - выведет статьи с большим id, чем у нашей.

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

    выведет от $id-7 до сколько там у тебя LIMIT, исключая саму статью.
     
  3. awp

    awp Читатель

    Заблокирован
    Регистр.:
    20 июл 2008
    Сообщения:
    7
    Симпатии:
    2
    where id between $id-7 and $id+7 and $id <> id
     
    Simpson нравится это.
  4. Mr.Friction

    Mr.Friction

    Регистр.:
    14 ноя 2006
    Сообщения:
    176
    Симпатии:
    10
    Прошу прощения за тупость, но кто-то может полностью написать эту строку как она должна быть ?
    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");
     
    вообще ничё не выводит
     
  5. Accountboy

    Accountboy Создатель

    Регистр.:
    18 июл 2008
    Сообщения:
    29
    Симпатии:
    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");

    Понятно что выше по коду нужно установить нужный ид. Вот эти -7 +7 лучше кодить в переменной, но это так, мелочи)
     
  6. Mr.Friction

    Mr.Friction

    Регистр.:
    14 ноя 2006
    Сообщения:
    176
    Симпатии:
    10
    не хочет.....
    вот такое заработало
    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");  
    не хочет
     
  7. Accountboy

    Accountboy Создатель

    Регистр.:
    18 июл 2008
    Сообщения:
    29
    Симпатии:
    10
    Специально создал у себя простенькую базу с одной табличкой, прогнал скрипт - пашет именно в таком виде в каком я запостил, может там в кавычках проблемка
    Попробуй так
    $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 />";
    }
    ?>  
    
     
  8. Mr.Friction

    Mr.Friction

    Регистр.:
    14 ноя 2006
    Сообщения:
    176
    Симпатии:
    10
    спасибо теде добрый человек....

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

    Accountboy Создатель

    Регистр.:
    18 июл 2008
    Сообщения:
    29
    Симпатии:
    10
    ID в данной категории могут не быть на 7 вперед и на 7 назад, это понятно, но SQL языку конкретный случай пофигу, ты просто ставишь любое условие по ид, выполняется оно или нет зависит от данных, а не от запроса.
     
  10. Mr.Friction

    Mr.Friction

    Регистр.:
    14 ноя 2006
    Сообщения:
    176
    Симпатии:
    10
    Вот в том-то и дело что по другому не хочет пахать.....
     
Статус темы:
Закрыта.