2015-05-27 10 views
7

abfragen, wie kann ich zwei Abfragen validieren, wenn die erste Abfrage ist NULL mit zweiter Abfrage fortfahren?Wie kann ich zwei verschiedene Tabellen in mysql

erste Abfrage:

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

2. Abfrage:

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

Sie mysqli_num_rows verwendet wird, kann nicht zu überprüfen. der Zeilen werden nach der ersten Abfrage zurückgegeben. –

+1

vielleicht eine 'UNION' verwenden und eine äußere' SELECT' mit einer 'LIMIT1' verwenden – Sean

+0

if (! $ Result) {// mach etwas} – Andrew

Antwort

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

Ich glaube, Sie zu Ihrem erklären aussehen sollte. Weil weniger zählen Abfragen an db - besser. In diesem Fall sollten Sie Union:

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%" 
; 

nach Feldtyp Sie können verstehen, aus welcher Tabelle Sie Daten erhalten.
Aber wenn Ihr erklären wird schlecht sein, sollten Sie separate Abfragen verwenden:

<?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

Diese Abfrage sieht hässlich aus, aber ich denke, Sie es

(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%") 
tun können

Sie sich vorstellen können, wie wir schneller erhalten können die Datensätze, wenn nur eine Abfrage statt zwei verwendet wird.

Sie auch Flagge in Folge hinzufügen (nur prüfen, ob Datensatz aus Tabelle 1 oder Tabelle 2)

+0

, wie ein Flag hinzufügen? :) –

+0

SELECT max (logs) als Protokolle, ID, 'Ich bin TABELLE 2' als 'which_table' FROM table2 ... Sie sollten dies auch für Tabelle 1 hinzufügen – parveen