ВЫБЕРИТЕ один столбец, где выполняется условие - PullRequest
0 голосов
/ 31 марта 2012

У меня есть такая таблица:

ID  Name_1            Name_2               Name_3
1   Egon Spengler     Ives Dertway         Blade Ketlump
2   Mac Taylor        Jedidiah Buckbolt    Sarah Connor
3   Sarah Connor      Modesto Slowfell     Jean-Luc Picard
4   Jean-Luc Picard   Beulah Cuxpan        Henry Jones
5   Ellen Ripley      Adeline Finkdell     Ives Dertway
6   James T. Kirk     Bertram Cam          Mac Taylor 
7   Henry Jones       Vidal Matton         Bertram Cam

Никогда не бывает одинаковых имен во всех трех столбцах, поэтому этого не может быть:

3   Sarah Connor      Sarah Connor     Sarah Connor

Я хотел бы выбрать только одно имя, которое удовлетворяет условию LIKE = '% value%', Проблема в том, что я никогда не знаю, какую строку выбрать, и я не хочу выбирать их все. Люди в этой таблице являются авторами. Есть также колонка о названии книги, жанре и так далее. Я хочу делать поиск только по авторам книг.

Спасибо за вашу помощь ...

Ответы [ 3 ]

2 голосов
/ 31 марта 2012

То, как вы структурировали свои данные, вы можете просто сделать

SELECT [row info you need]
FROM `table`
WHERE Name_1 LIKE '%value%'
   OR Name_2 LIKE '%value%'
   OR Name_3 LIKE '%value%'

Или с помощью полнотекстового индекса (сначала нужно создать индекс):

SELECT [row info you need]
FROM `table`
WHERE MATCH( names ) AGAINST ( 'value' )

Очевидно, что использование любого из них не скажет вам, какой столбец соответствует.

Но вам может быть лучше перестроить свою схему следующим образом

table
-----
id
[other info]

names
-----
id
name

tables_names
------------
table_id
name_id

Таким образом, вы можете сделать простое INNER JOIN и избежать использования отдельных предложений OR, и вы сможете легко определить, какое значение соответствует вашему запросу.

1 голос
/ 31 марта 2012

Попробуйте это:

SELECT

IF (
    Name_1 LIKE '%value%',
    Name_1,
    IF (
        Name_2 LIKE '%value%',
        Name_2,
        IF (
            Name_3 LIKE '%value%',
            Name_3,
            NULL
        )
    )
) AS `Name`

FROM
    Table_Name
WHERE
    Name_1 LIKE '%value%' OR Name_2 LIKE '%value%' OR Name_3 LIKE '%value%'
0 голосов
/ 31 марта 2012

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

SELECT * FROM table WHERE Name_1 LIKE '%xx%' or Name_2 LIKE '%xx%' OR Name_3 LIKE '%xx%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...