2015-12-22 3 views
-2

Возможно ли вернуть Mysql значение поиска, которое оно использовало для поиска строки?Mysql Значение поиска, используемое для поиска строки

Например, у меня есть база данных, как это:

ID | FLIPPERID | PHONENUMBERS | POSTERIDS | 
"1","10001","7003158974,8769873453,9085699812","6477741332,34234324234,5734345,34234" 

я сделать запрос, как это. Но с сотнями значений:

SELECT * FROM `flipperaccounts` 
WHERE `posterids` = 3126764 
    OR `posterids` = 65139757 
    OR `phonenumbers` = 6477741332 
    OR `posterids` = 72345341; 

Теперь мне интересно, если есть способ узнать, какое значение вызвало строку showup?

+0

У вас есть 4 столбца, но только данные для 3 столбцов, я полагаю, вы оставили «ID»? – dstudeba

+0

Исправлено. Вопрос все тот же. – Brandon

+0

Вам действительно не нужно значение, которое соответствует, вместо этого вам нужно имя столбца, которое соответствует. Таким образом, вы можете просто получить доступ к столбцу через результат PHP. – Ohgodwhy

ответ

0

Вы можете сделать прямое сравнение, используя оператор case/when/then. Я использовал CONCAT_WS здесь, в случае, если имеется несколько столбцов, поэтому вы можете использовать explode(',', $row['matched_column']) для вашего удобства.

SELECT 
    ID,FLIPPERID,PHONENUMBERS,POSTERIDS, CONCAT_WS(', ', 
     CASE WHEN posterids = 3126764 THEN 'posterids_1', 
     CASE WHEN posterids = 65139757 THEN 'posterids_2', 
     CASE WHEN phonenumbers = 6477741332 THEN 'phonenumbers', 
     CASE WHEN posterids = 72345341 THEN 'posterids_3') AS matched_column 
    FROM flipperaccounts 

Затем, когда вы получите результат обратно ваш стол будет, как:

| ID | FLIPPERID | PHONENUMBERS | POSTERIDS | MATCHED_COLUMN | 
    "1" "10001" "700315894.." "647774..", "posterids_2" 

Тогда вы можете получить доступ к нему в вашем оператора цикла в качестве индекса в строке.

if(!empty($row['matched_column'])) { 
    echo $row['matched_column']; 
} 

Надеюсь, это поможет.

0

Я не знаю, как рассказать, какая часть сложного предложения WHERE вызвала SELECTion.

Обратите внимание, что OR является ассоциативным (а не коммутативным), поэтому более чем одно из ваших предложений может привести к удару, и поэтому порядок важен для вашего ответа - проблема заключается в том, что оптимизатор запросов знает, что OR является ассоциативным, и поэтому он может произвольно изменять порядок предложений OR! Например, если один столбец имеет более короткий индекс, оптимизатор запросов может сделать это первым, или он может сначала выбрать PRIMARY или UNIQUE столбцы.

Так что мне кажется, что ваш вопрос не детерминирован, не возвращая массив предложений OR, которые «попали».

Вы можете сделать это, используя «SELECT COUNT (*)» для каждого из предложений OR, который является довольно неинтенсивным, если индексы индексируются.

0

Я пошел с RiggsFolly идеей создания детского стола. Спасибо за помощь.

+0

Спасибо, что сообщили мне – RiggsFolly

Смежные вопросы