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;
现在我想知道是否有办法知道哪一个值触发了行显示?
答案 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制作儿童餐桌的想法。谢谢你的帮助。