2015-05-27 5 views
7

कैसे मैं दो प्रश्नों को मान्य कर सकते में दो अलग अलग तालिका कैसे क्वेरी कर सकता है, अगर पहली क्वेरी शून्य दूसरी क्वेरी के लिए आगे बढ़ना है?मैं mysql

1 क्वेरी:

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

2 क्वेरी:

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

आप कोई जाँच करने के लिए इस्तेमाल किया जा सकता mysqli_num_rows (सिर्फ तालिका 1 या तालिका 2 से रिकॉर्ड करता है, तो जाँच करने के लिए)। पहली क्वेरी द्वारा पंक्तियों की वापसी। –

+1

शायद एक 'UNION' का उपयोग करें और एक' LIMIT में 1' – Sean

+0

साथ एक बाहरी 'SELECT' का उपयोग कर if (! $ परिणाम) {// कुछ करते} – 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

मुझे लगता है कि आप अपने को समझाने के लिए दिखना चाहिए। क्योंकि डीबी के लिए कम गिनती पूछताछ - बेहतर। इस मामले में आपको संघ का उपयोग करना चाहिए:

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

कर सकते हैं रिकॉर्ड अगर दो के बजाय केवल एक क्वेरी का इस्तेमाल किया।

तुम भी परिणाम में झंडा जोड़ सकते हैं

+0

कैसे एक झंडा जोड़ने की जरूरत है? :) –

+0

चयन अधिकतम के रूप में लॉग, आईडी (लॉग), 'which_table' table2 से ... आप के साथ-साथ तालिका 1 के लिए इस जोड़ने चाहिए के रूप में 'मैं टेबल प्रातः 2 बजे' – parveen