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

может использовать 'UNION' и использовать внешний' SELECT' с 'LIMIT 1' – Sean

+0

if (! $ Result) {// сделать что-то} – 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

Я думаю, вы должны смотреть на ваши объяснения. Потому что меньше запросов count к 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) как logs, id, 'I AM TABLE 2' AS 'which_table' FROM table2 ... вы должны добавить это для таблицы 1, а также – parveen

Смежные вопросы