Как искать несколько столбцов в MySQL?

Даже зная его немного поздно, и даже зная, что это немного взломать, я использовал следующее решение для достижения желаемого результата. Если вы любите Java-Naming-Conventions, мой совет состоит в том, чтобы прекратить чтение здесь ...

Имея такой класс, определяя константы, сгруппированные пустыми классами, чтобы создать вид иерархии:

public class PERMISSION{
    public static class PAGE{
       public static final Long SEE = 1L; 
       public static final Long EDIT = 2L; 
       public static final Long DELETE = 4L; 
       ...
    }
}

можно использовать из java как PERMISSION.PAGE.SEE для извлечения значения 1L

. Для достижения простой возможности доступа из EL-выражений я сделал следующее: (Если есть бог кодирования - он, надеюсь, может простить меня: D)

@Named(value="PERMISSION")
public class PERMISSION{
    public static class PAGE{
       public static final Long SEE = 1L; 
       public static final Long EDIT = 2L; 
       public static final Long DELETE = 4L; 
       ...

       //EL Wrapper
       public Long getSEE(){
           return PAGE.SEE;
       }

       public Long getEDIT(){
           return PAGE.EDIT;
       }

       public Long getDELETE(){
           return PAGE.DELETE;
       }
    }

    //EL-Wrapper
    public PAGE getPAGE() {
        return new PAGE();
    }
}

, наконец, EL-Expression для доступа к тому же самому Long становится: #{PERMISSION.PAGE.SEE} - равенство для Java и EL-Access. Я знаю, что это вне всякого соглашения, но оно отлично работает.

29
задан Quassnoi 25 March 2010 в 10:15
поделиться

6 ответов

Вы можете использовать операторы AND или OR, в зависимости от того, что вы хотите, чтобы поиск возвращал.

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%;

Оба условия должны совпадать, чтобы запись была возвращена. В качестве альтернативы:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%;

Если какое-либо предложение совпадает, запись будет возвращена.

Для получения дополнительной информации о том, что вы можете делать с запросами MySQL SELECT, попробуйте документацию .

35
ответ дан akamike 25 March 2010 в 10:15
поделиться

Если это только для поиска, вы можете использовать CONCATENATE_WS. Это позволило бы поиск по шаблону. В зависимости от размера таблицы могут возникнуть проблемы с производительностью.

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
41
ответ дан bishop 25 March 2010 в 10:15
поделиться

Если ваша таблица MyISAM:

SELECT  *
FROM    pages
WHERE   MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE)

Это будет намного быстрее, если вы создадите индекс FULLTEXT для своих столбцов:

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content)

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

15
ответ дан Quassnoi 25 March 2010 в 10:15
поделиться

Вот запрос, который вы можете использовать для поиска чего-либо в вашей базе данных в качестве результата поиска,

SELECT * FROM tbl_customer 
    WHERE CustomerName LIKE '%".$search."%'
    OR Address LIKE '%".$search."%' 
    OR City LIKE '%".$search."%' 
    OR PostalCode LIKE '%".$search."%' 
    OR Country LIKE '%".$search."%'

Использование этого кода поможет вам легко искать несколько столбцов

0
ответ дан Ravi Khatri 25 March 2010 в 10:15
поделиться

1)

select *
from employee em
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%';

2)

select *
from employee em
where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%';

Первый полезен, когда у нас есть такие данные, как: «имя, фамилия».

например,

  • parth patel
  • parth p
  • patel parth

Второе полезно, когда у нас есть такие данные, как: ' имя Фамилия'. В нем также можно использовать специальные символы.

Например,

  • parth-patel
  • parth_p
  • patel # parth
3
ответ дан Parth Patel 25 March 2010 в 10:15
поделиться
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');

Пожалуйста, попробуйте с вышеуказанным запросом.

0
ответ дан Mayank Vadiya 25 March 2010 в 10:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: