Как провериь наличие чего-либо в БД?

Тема в разделе "PHP", создана пользователем Solomon Kane, 3 сен 2010.

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

    Solomon Kane Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    144
    Симпатии:
    9
    Предположим, в БД есть три айди - 1, 2, 3. Предположим, также, что есть функция, которая получает откуда-то айди, который потом участвует в запросе к БД. Как проверить, есть ли вообще такой айди в БД. Например, вот:

    1) получаем id из функции;

    2) проверяем, есть ли вообще такой id в БД;

    3) если есть, то..., если нет, то...

    И так далее.
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    делайте sQL запрос к БД на выборку записей ( или количество записей )с таким айди ...


    PHP:
    select count(*) from table where id xxx
    где xxx - айди который вы получаете из вашей функции

    если количество не 0 - значит записи есть ... в противном случае нет
     
    Solomon Kane нравится это.
  3. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Позволь полюбопытствовать, что это за задача, которая требует такой проверки ID. Предчуствую, что она решится и без лишнего запроса к БД.
     
  4. Solomon Kane

    Solomon Kane Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    144
    Симпатии:
    9
    В функцию идёт id, впоследствии этот id используется для отображения страниц, категорий и прочего. Нужно проверять, существует ли id, чтобы на основании этого предпринимать те или иные действия.
     
  5. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    В таком случае лучше будет сделать так:
    PHP:

    function getNews($IDs)
    {
    $news=array();
    $res=mysql_query("SELECT id,.... FROM table WHERE id IN ($IDs)..."); // Делаешь запрос согласно списка  ID, не смотря, есть такие в БД или нет.
    $IDs=implode(", "$IDs); приводим список IDS к виду "1,2,3..N"
    while()$row  mysql_fetxc_assoc($res){
      
    $result[$row['id']]=$row//фетчишь что нашлось в массив, где ID - ключи
    return  $news;
    }
    .....
    $IDs getIds(); //допустим функция которая получает список ID ввиде массива 
    $news=getNews($IDs);
    foreach(
    $IDs as $ID){
      if(isset(
    $news[$ID])){ 
         
    //Если был такой ID в базе - чето делаешь, например выводишь новость
      
    }else{
        
    //Если небыло - предпринимаешь свои действия. Хотя нужно ли..
      
    }
    }
    Таким образом избаишься от лишнего запроса.
     
  6. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    не
    PHP:
    while()$row  mysql_fetxc_assoc($res){
    а
    PHP:
    while($row  mysql_fetxc_assoc($res)){
    а вообще эту задачу вполне можно решить подзапросами
     
  7. Solomon Kane

    Solomon Kane Постоялец

    Регистр.:
    26 авг 2009
    Сообщения:
    144
    Симпатии:
    9
    Я дело в том, что юзаю класс active record, а там запросы строятся иначе, поэтому я пока не разбирался особо. Может, можно сделать и так, как описано выше. Но чем в принципе пересчёт плох? Берёт и считает всё, что есть с таким id. Если ничего нет, возвращает ноль. С нулём удобно работать. А как по производительности? Может, и смысла нет, так как будет по производительности то же самое.
     
  8. k11fang

    k11fang Создатель

    Регистр.:
    16 фев 2010
    Сообщения:
    16
    Симпатии:
    1
    Я так понимаю, 3-ий пункт предполагает последующее обращение к базе? Если так, то почему не сделать проверку айди уже в запросе к БД? Путем подзапроса или просто условием? Без запроса к базе эта задача невыполнима. Так зачем плодить количество запросов?
     
  9. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    mysql_fetch_assoc
     
  10. nikservik

    nikservik Писатель

    Регистр.:
    13 авг 2009
    Сообщения:
    4
    Симпатии:
    2
    Такой запрос достаточно быстро обрабатывается, потому что индекс по id строится автоматом. Попробуй. Если будет тормозить, тогда уже оптимизируй.
     
Статус темы:
Закрыта.