ФорумПрограммированиеPHP для идиотов → Поиск и условия с логикой

Поиск и условия с логикой

  • kamenev.n

    Сообщения: 5 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2010 г. 19:34

    Привет всем, пришёл я к вам за советом!
    Пишу поиск по сайту, всё передаётся get запросами, вот хочу посоветоваться, так как условий очень много, хотел бы узнать как это реализовать попроще, потому как описывать все "условия поиска", мне кажется не правильным.
    Пример, как я знаю сделать можно:
    query1 = 'SELECT * WHERE title = $title'; 
    query2 = 'SELECT * WHERE title = $title and cost = $cost';
    query3 = 'SELECT * WHERE title = $title and cost = $cost and brand = $brand';
    query4 = 'SELECT * WHERE title = $title and brand = $brand';

    и т.п. но там слишком много будет и каждый случай не проверить, как это сделать более правильным путём?
    нужен более легкий и автоматизированный способ.

    есть ещё такой способ:
    $query='SELECT * FROM tablename WHERE 1=1' 
    if($title)
    $query.=" AND `title='$title' ";
    if($cost)
    $query.=" AND `cost`='$cost' ";
    . . . . . . . . . . . . .
    if(чекбокс какой-то отмеченный, либо текстовое поле не пустое)
    $query.=" AND `поле`='значение' ";
    $res=mysql_query($query);


    но не хочется десятки условий писать
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 1 ноября 2010 г. 21:07, спустя 1 час 32 минуты 54 секунды

    Это больше похоже не на поиск, а на выборку из бд по фильтру. Посмотри в сторону LIKE SQL
  • artoodetoo

    Сообщения: 5146 Репутация: N Группа: в ухо

    Spritz 1 ноября 2010 г. 21:29, спустя 21 минуту 33 секунды

    kamenev.n, твой второй листинг вполне нормальный, если не дрочить на {}. Валидацию и инъекции оставим за кадром.

    Если хочется что-то приукрасить, копи в $cond[] = xxx и один раз implode(' AND ', $cond) Тот же х. но красивоооо
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 2 ноября 2010 г. 1:26, спустя 3 часа 57 минут 34 секунды

  • kamenev.n

    Сообщения: 5 Репутация: N Группа: Кто попало

    Spritz 2 ноября 2010 г. 6:20, спустя 4 часа 53 минуты 31 секунду


    Это больше похоже не на поиск, а на выборку из бд по фильтру. Посмотри в сторону LIKE SQL

    про LIKE и %LIKE% знаю, просто написал так для примера


    kamenev.n, твой второй листинг вполне нормальный, если не дрочить на {}. Валидацию и инъекции оставим за кадром.

    Если хочется что-то приукрасить, копи в $cond[] = xxx и один раз implode(' AND ', $cond) Тот же х. но красивоооо

    а для тех кто в танке, можно примерчик?
  • truth4oll

    Сообщения: 463 Репутация: N Группа: Адекваты

    Spritz 2 ноября 2010 г. 6:31, спустя 10 минут 52 секунды

    $query='SELECT * FROM tablename WHERE 1=1'
    if($title)
    $query.=" AND `title='$title' ";
    if($cost)
    $query.=" AND `cost`='$cost' ";
    . . . . . . . . . . . . .
    if(чекбокс какой-то отмеченный, либо текстовое поле не пустое)
    $query.=" AND `поле`='значение' ";
    $res=mysql_query($query);


    $query='SELECT * FROM tablename WHERE 1=1'
    if($title)
    $query[]="title='$title' ";
    if($cost)
    $query[]="`cost`='$cost' ";
    . . . . . . . . . . . . .
    if(чекбокс какой-то отмеченный, либо текстовое поле не пустое)
    $query[]=" `поле`='значение' ";
    $query = implode(' AND ', $query)
    $res=mysql_query($query);
    Спустя 83 сек.
    тоесть бля, ложанулся, но смысл я думаю понятен
  • artoodetoo

    Сообщения: 5146 Репутация: N Группа: в ухо

    Spritz 2 ноября 2010 г. 20:22, спустя 13 часов 51 минуту 16 секунд

    хуета
    Спустя 60 сек.

    $query='SELECT * FROM tablename'
    if($title)
     $cond[]="title='$title' ";
    if($cost)
     $cond[]="`cost`='$cost' ";
     . . . . . . . . . . . . .
    if(чекбокс какой-то отмеченный, либо текстовое поле не пустое)
     $cond[]=" `поле`='значение' ";
    if (!empty($cond))
    $query .= ' WHERE ' . implode(' AND ', $cond)
    $res=mysql_query($query);

    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!