2015-05-27 28 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