За последние 24 часа нас посетили 17767 программистов и 1650 роботов. Сейчас ищут 1609 программистов ...

выборка из базы данных

Тема в разделе "Вопросы от блондинок", создана пользователем warm, 20 сен 2007.

  1. warm

    warm Активный пользователь

    С нами с:
    31 янв 2007
    Сообщения:
    74
    Симпатии:
    0
    Вопрос стар, как мир.
    Но всё же )
    есть, например, запись в базе данных
    401, 471-475, 483-487, 491-494, 496, 500-502, 690, 815, 818, 821, 831, 833-836, 841, 901-902, 910, 911, 921, 926, 927, 928, ей соответствует, например, число 15
    а есть строками ниже запись
    47, 49, которому соответствует 19
    необходимо, что бы при получении методом POST $code искать соответствующую запись , то есть если передаём 496 или 501 (сидит между 500 и 502) в итоге имеем 15
    а если 49 то должны иметь 19
    на данный момент скрипт берёт первое соответствие, а не точное (вводим 49 на выходе 15)
    помогите с подсказкой, учитывая цвет волос :)
    PHP:
    1. $diapozon = 10;
    2.     $str = $code;
    3.     $q = mysql_query("SELECT `price` FROM `tarif` WHERE `code` LIKE '%".addslashes($str)."%'  OR
    4.                                                         `code` LIKE '%-".addslashes($str)."%' OR
    5.                                                         `code` LIKE '%".addslashes($str)."-%' LIMIT 0,1");
    6.     if(mysql_num_rows($q) > 0){
    7.         $r = mysql_fetch_array($q);
    8.         $tarif_f = $r['price'];
    9.     }else{
    10.         $n_str = $str;
    11.         for($i=0;$i<$diapozon;++$i){
    12.             --$n_str;
    13.             $q = mysql_query("SELECT `price`, `code` FROM `tarif`
    14.                                 WHERE `code` LIKE '%".addslashes($n_str)."-%' LIMIT 0,1");
    15.             if(mysql_num_rows($q) > 0){
    16.                 $r = mysql_fetch_array($q);
    17.                 @preg_match('#'.$n_str.'-([a-z0-9])([a-z0-9])([a-z0-9])#i', $r['code'], $matches);
    18.                 if(isset($matches[1])){
    19.                     $t_str = $matches[1].$matches[2].$matches[3];
    20.                     if($t_str >= $str){
    21.                         $tarif_f = $r['price'];
    22.                         break;
    23.                     }
    24.                 }
    25.             }
    26.         }
    27.         if(!isset($tarif_f)){
    28.             $n_str = $str;
    29.             for($i=0;$i<$diapozon;++$i){
    30.                 ++$n_str;
    31.                 $q = mysql_query("SELECT `price`, `code` FROM `tarif`
    32.                                     WHERE `code` LIKE '%-".addslashes($n_str)."%' LIMIT 0,1");
    33.                 if(mysql_num_rows($q) > 0){
    34.                     $r = mysql_fetch_array($q);
    35.                     @preg_match('#([a-z0-9])([a-z0-9])([a-z0-9])-'.$n_str.'#i', $r['code'], $matches);
    36.                     if(isset($matches[1])){
    37.                         $t_str = $matches[1].$matches[2].$matches[3];
    38.                         if($t_str <= $str){
    39.                             $tarif_f = $r['price'];
    40.                             break;
    41.                         }
    42.                     }
    43.                 }
    44.             }      
    45.         }
    46.     }
    47.    
    48.     if(!isset($tarif_f)){die("Введён не ккорректный код города или страны");
    49.  
    50. @unlink($dest);}
     
  2. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    интервалы перекрываются?
     
  3. warm

    warm Активный пользователь

    С нами с:
    31 янв 2007
    Сообщения:
    74
    Симпатии:
    0
    Да.
    если , например 491-493
    то надо перекрыть и охватить 492 и т.п.