2015-12-22 38 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子句數組。

您可以通過對每個OR子句使用「SELECT COUNT(*)」來完成此操作,如果索引列的話,這些OR子句非常密集。

0

我與RiggsFolly製作兒童表的想法一起去了。謝謝您的幫助。

+0

謝謝你讓我知道 – RiggsFolly