dbSimple выборка по нескольку AND как сделать ??

Тема в разделе "Базы данных", создана пользователем genarator2003, 11 окт 2011.

Модераторы: latteo
  1. genarator2003

    genarator2003 Постоялец

    Регистр.:
    23 авг 2007
    Сообщения:
    113
    Симпатии:
    8
    Код:
    SELECT * FROM `cars` WHERE brand_id=55 AND model_name='name' AND salon_id=50
    Еcть такой запрос причем каких-то условий может и не быть
    Например

    Код:
    SELECT * FROM `cars` WHERE brand_id=55 AND model_name='name'
    Т.е. нужно чтобы в зависимости от количества пар ключ значение дописывал нужное количество WHERE $key=$val and $key1=$val1
    Почитал доку, но подобного не нашел, можно ли такое реализовать на DbSimple.??
     
  2. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.039
    может я чегото не понимаю но вроде всё сводится к составлению запроса те к чистому php

    почему нельзя все пары помещать в массив
    затем просто

    PHP:
    $sql implode(' AND '$array);
    $nsql 'SELECT * FROM `cars` WHERE '.$sql;
     
  3. wal

    wal Постоялец

    Регистр.:
    24 мар 2008
    Сообщения:
    89
    Симпатии:
    30
    PHP:
    $sql implode(' AND '$array);
    $nsql 'SELECT * FROM `cars` WHERE 1=1 '.$sql;
    иначе если $array пустой, ошибка в запросе будет...
     
  4. Soul :)

    Soul :) Постоялец

    Регистр.:
    22 мар 2007
    Сообщения:
    86
    Симпатии:
    9
    Если массив пустой, то лучше делать отдельную проверку и переписывать запрос без WHERE вовсе.

    Т.к. по моим наблюдениям условие 1=1 таки прилично замедлет запрос по сравнению с запросом без условией вовсе.
     
  5. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    133
    Симпатии:
    40
    Не занимайтесь глупостями, в любом случае у Вас число получаемых параметров для выборки известно.

    проверяйте наличие входящих параметров от пользователя. и на основе их присутствия стройте нужный запрос.
     
  6. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Ибо не вариант, делайте дополнительную отдельную проверку массива, верняк и надежность.
     
  7. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Примерно так:
    PHP:
    $where='';
    foreach(
    $ar as $i=>$v){
    $where.=((!empty($where))?' AND ':'').$i.'='.$v;
    }
    if(!empty(
    $where)) $where=' WHERE '.$where;
    И еще бы проверить типы переменных, я так понимаю, там и строковые бывают и числовые.
    В общем, все зависит от того, как данные передаются, какова их структура.