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

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

  • kamenev.n

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

    Spritz Ноя. 2, 2010, 5: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 Ноя. 2, 2010, 7:07 д.п., спустя 1 час 32 минуты 54 секунды

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

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

    Spritz Ноя. 2, 2010, 7:29 д.п., спустя 21 минуту 33 секунды

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

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

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

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

  • kamenev.n

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

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


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

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


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

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

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

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

    Spritz Ноя. 2, 2010, 4: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

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

    Spritz Ноя. 3, 2010, 6: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ι унц-унц

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