Предложение WHERE с ПОДОБНЫМ в нескольких таблицах

#php #mysql

#php #mysql

Вопрос:

У меня есть следующий запрос:

 SELECT ci.cid, ci.set, ci.year, ci.name, ci.cardvar, ci.comp, ci.grade, ci.pop, ci.cardnum
      FROM uc
      INNER JOIN ci ON uc.cid = ci.cardId
      WHERE uc.uid = '$userId' and ci.name like '%$updateSearchCriteria%'
  

Я бы включил 'updateSearchCriteria' с другими строками. Итак, прямо сейчас, если пользователь вводит имя пользователя, он будет искать только эти имена в name строке и возвращать его.

Так что, если updateSearchCriteria был счет -> все счета вернутся.

Я хотел бы, чтобы пользователь вводил year , name или даже cardvar .

 SELECT ci.cid, ci.set, ci.year, ci.name, ci.cardvar, ci.comp, ci.grade, ci.pop, ci.cardnum
      FROM uc
      INNER JOIN ci ON uc.cid = ci.cardId
      WHERE uc.uid = '$userId' and ci.year like '%$updateSearchCriteria%' or 
          ci.name like '%$updateSearchCriteria%' or 
          ci.cardvar like '%$updateSearchCriteria%'
  

Итак, теперь, если я введу счет за 2018 год -> ничего не возвращается.
или база счетов 2018 (база является cardvar) ничего не вернет. Может быть, мне нужно объединить все в другой столбец? Не уверен.

Как я могу объединить несколько строк в предложение where / like?

Ответ №1:

Вы должны добавить фигурные скобки, чтобы установить определенный приоритет оператора и использовать отдельные критерии поиска для каждого столбца:

 WHERE 
  uc.uid = '$userId' 
  AND 
  (
    ci.year LIKE '%$yearBeingSearched%' 
    OR
    ci.name LIKE '%$nameBeingSearched%'
    OR
    ci.cardvar LIKE '%$cardvarBeingSearched%'
  )
  

Комментарии:

1. Я боялся, что мне понадобятся отдельные критерии поиска. В конце концов, я могу демонстративно изменить код клиента, если это необходимо. Большое спасибо!

Ответ №2:

Вы можете использовать функцию CONCAT(), если у вас разные столбцы с одинаковыми критериями:

 WHERE uc.uid = '$userId' AND concat(ci.year, ci.name, ci.cardvar) like '%$cardvarBeingSearched%'
  

Вы можете добавить больше столбцов в функцию CONCAT() по своему усмотрению.

Ответ №3:

Вы можете разделить свои критерии пробелами и использовать оператор like для каждой разделенной строки. В этом случае вам нужно создать динамический запрос

Комментарии:

1. это бессмысленно без примера. но спасибо.