2 запроса к базе, нужно обьединить в один

Тема в разделе "Базы данных", создана пользователем eugenel, 6 мар 2009.

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

    eugenel Постоялец

    Регистр.:
    3 авг 2008
    Сообщения:
    122
    Симпатии:
    14
    Есть такие 2 запроса к базе. Можно ли обьединить это все в один, без потери смысла?
    PHP:
    $result_cats $db->query"SELECT id FROM " PREFIX "_category WHERE alt_name='00277'" );
     
    $row_catels $db->get_row($result_cats);
    $result_catw $db->query"SELECT id FROM " PREFIX "_category WHERE parentid='".$row_catels['id']."'" );

    echo 
    $db->num_rows($result_catw);
     
  2. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Видимо так
    PHP:
    $result_catw $db->query"SELECT id FROM " PREFIX "_category WHERE alt_name='00277' AND parentid='".$row_catels['id']."'" );

    echo 
    $db->num_rows($result_catw);  
     
  3. ajrengen

    ajrengen Постоялец

    Регистр.:
    28 сен 2008
    Сообщения:
    110
    Симпатии:
    29
    Скорее всего имелось ввиду ИЛИ:

    PHP:
    $result_catw $db->query"SELECT id FROM " PREFIX "_category WHERE alt_name='00277' OR parentid='".$row_catels['id']."'" );

    echo 
    $db->num_rows($result_catw); 
    Тоесть вернётся два результата
     
  4. eugenel

    eugenel Постоялец

    Регистр.:
    3 авг 2008
    Сообщения:
    122
    Симпатии:
    14
    Вижу 2 ответа.
    Но не могу понять, а где же вы берете $row_catels['id']?
    И вообще, не проверил, но видно на первый взгляд, что СМЫСЛ моих запросов и ваших, а тем более результат - разный :) Или я не прав?
    Мой запрос:
    1) Делаем запрос и узнаем $row_catels['id'].
    2) Делаем запрос, чтобы узнать, сколько записей содержится в базе, где parentid совпадает с $row_catels['id'].
    Ваши запросы, я так не могу прочитать.
     
  5. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    PHP:
    $result_catw $db->query"SELECT id FROM " PREFIX "_category WHERE parentid=(SELECT id FROM " PREFIX "_category WHERE alt_name='00277')" );
    echo 
    $db->num_rows($result_catw);
     
  6. eugenel

    eugenel Постоялец

    Регистр.:
    3 авг 2008
    Сообщения:
    122
    Симпатии:
    14
    А в плане нагрузки, последний варинт или мой лучше?
     
  7. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Ну, по-моему, тут нагрузки практически никакой в обоих случаях. Я просто написал так, чтобы выполнить запрос один раз. Единственное отличие, наверное, в том, что не надо два раза посылать запрос к БД.
     
  8. best

    best

    Регистр.:
    12 апр 2006
    Сообщения:
    246
    Симпатии:
    54
    В нагрузке разница есть. Если выборка вложенного запроса большая, то вложенные запросы обычно не используют.(напиши бинчмарк и проверь) А если так хочеться объеденить, то лучше использовать префикс.
     
  9. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Ну так то да. Но в данном случае выборка всего по одному параметру + нужна только первая(если не единственная) запись.
     
Статус темы:
Закрыта.