用于查找行的Mysql搜索值

时间:2015-12-22 23:29:40

标签: php 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;

现在我想知道是否有办法知道哪一个值触发了行显示?

3 个答案:

答案 0 :(得分: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'];
}

希望这有帮助。

答案 1 :(得分:0)

我不知道有什么方法可以告诉复杂的WHERE子句的哪一部分导致了SELECTion。

请注意,OR是关联的(而不是可交换的),因此不止一个子句可能会导致命中,因此顺序对您的答案很重要 - 问题是,查询优化器知道OR是关联的,因此它可以随意改变OR条款的顺序!例如,如果一列具有较短的索引,则查询优化器可能会选择先执行此操作,或者可以选择先执行PRIMARY或UNIQUE列。

所以在我看来,你的问题是非确定性的,没有返回一系列OR条款,而且#34;

你可以使用" SELECT COUNT(*)"对于每个OR子句,如果对列进行索引,则相当非强化。

答案 2 :(得分:0)

我选择了RiggsFolly制作儿童餐桌的想法。谢谢你的帮助。