2015-05-27 29 views
7

如何驗證兩個查詢,如果第一個查詢爲NULL,則繼續執行第二個查詢?如何查詢mysql中的兩個不同表

第一次查詢:

SELECT max(logs) as logs,id FROM table1 WHERE 
message NOT LIKE "[ SYSTEM%" 

第二查詢:

SELECT max(logs) as logs,id FROM table2 WHERE 
message LIKE "[ SYSTEM%" 
+0

您可以使用mysqli_num_rows檢查沒有。的行通過第一個查詢返回。 –

+1

如果(!$ result){//做點什麼} – Sean

+0

? :) – Andrew

回答

0
$query1 = "SELECT max(logs) as logs,id FROM table1 WHERE 
message NOT LIKE '[ SYSTEM%'"; 
$query2 = SELECT max(logs) as logs,id FROM table2 WHERE 
message LIKE '[ SYSTEM%'"; 
if(mysql_query($query1)) { 
    $result = mysql_query($query1); 
} else { 
    $result = mysql_query($query2); 
} 
1

我想你應該看看你的解釋。因爲減少對db的計數查詢 - 更好。在這種情況下,您應該使用聯合:

SELECT max(logs) as logs, id, 'table1' type 
FROM table1 WHERE message NOT LIKE "[ SYSTEM%" 
UNION 
SELECT max(logs) as logs, id, 'table2' type 
FROM table2 WHERE message LIKE "[ SYSTEM%" 
; 

按字段類型您可以瞭解從哪個表接收數據。
但如果你的解釋將是壞的,你應該使用單獨的查詢:

<?php 

$dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'root'); 

$sth = $dbh->prepare(' 
    SELECT max(logs) as logs, id 
    FROM table1 WHERE message NOT LIKE :like 
'); 
$sth->bindParam(':like', $like, PDO::PARAM_STR); 
$sth->execute(); 
$result = $sth->fetchAll(PDO::FETCH_ASSOC); 

if (empty($result)) { 
    $sth = $dbh->prepare(' 
     SELECT max(logs) as logs, id 
     FROM table2 WHERE message LIKE :like 
    '); 
    $sth->bindParam(':like', $like, PDO::PARAM_STR); 
    $sth->execute(); 
    $result = $sth->fetchAll(PDO::FETCH_ASSOC); 
} 

var_export($result); 
1

這個查詢看起來很醜,但我認爲你可以做到這一點

(SELECT max(logs) as logs,id 
FROM table1 
WHERE message NOT LIKE "[ SYSTEM%") 
UNION ALL 
(SELECT max(logs) as logs,id 
FROM table2 
WHERE message LIKE "[ SYSTEM%") 

你可以想像我們如何更快能得到記錄如果只使用一個查詢而不是兩個。

您還可以在結果添加標誌(只是爲了檢查是否從表1和表2的記錄)

+0

如何添加一個標誌? :) –

+0

SELECT max(logs)as log,id,'I AM TABLE 2'as'which_table' FROM table2 ...你應該爲表1添加這個 – parveen