簡體   English   中英

如何在單個sql查詢中獲取失敗的條件

[英]How to get which condition has failed if any in a single sql query

這可能是奇怪的,也可能不是。。。但是我需要找出3個條件中有哪個失敗了...
我解釋...
在我的查詢中,如果所有條件都正常,那么我有3個條件,但是沒有問題,但是如果其中一個條件失敗,則我需要知道哪個條件或多個條件失敗,以便我可以建立適當的響應...
例:

if(strlen($k) == 16 && filter_var($em, FILTER_VALIDATE_EMAIL)) {
        $con = $c->Con();
        $q = $con->query("SELECT COUNT(*) FROM table WHERE v = '$k' AND ema = '$em' AND ve = '0'");
        $r = $q->fetch_row();
        if($r > 0) { $q = $con->query("UPDATE table SET ve = '1' WHERE v = '$key' AND emails = '$em'");
            if($q){
                $mss = 'Ready'; // MS 1
            }
        } else {
            $mss = 'It was ready'; // MS 2
        }
    } else {
        $mss = 'Something is wrong!'; // MS 3
    }

所以第一個查詢有3個條件,如果一切都OK,然后轉到下一個“查詢”,但是,我怎么知道其中一個條件失敗?...如果[v]不匹配,或者如果電子郵件,該怎么辦?不匹配或ve不匹配...那樣我可以在MS 2上顯示正確的消息...而不是一般消息...
如果v不等於$ k,則$ mss ='您的密鑰不匹配';
如果電子郵件不等於$ ema,則$ mss ='您的電子郵件沒有資金';
如果ve不等於0,則$ mss ='您的密鑰沒有值';

問題是我想使其盡可能短而整潔,我可以針對每個條件進行單獨的查詢,這是一種懶惰的方法,但是有效...

我可以提出一個笨拙的解決方案,主要將工作轉移到PHP。

  1. 更改查詢以使用OR選擇行。 返回可能的行集。

SELECT v, ema, ve FROM table WHERE v = '$k' OR ema = '$em' OR ve = '0';

  1. 現在,通過此結果集檢查條件。

偽碼

while( $row = fetch_row($result) ){
  if( 1 and 2 and 3 ){
    //SUCCESS
  }
  elseif( NOT 1 ){
    //1 is the problem
  }
  elseif( NOT 2 ){
    //2 is the problem
  }
  elseif( NOT 3 ){
    //3 is the problem
  }
}

1,2,3是條件(例如1 =($ row ['v'] == $ k))

您必須弄清楚如何處理多行,理想情況下,架構可以避免這種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM