2014-05-12 77 views
0

我遇到了有關SQL查詢的問題。將2個sql查詢放入同一個PHP數組中

在我使用一個查詢之前。 :

$query= "SELECT hw.name as server, proc.cmd as cmd, proc.pid as pid, proc.ppid as ppid FROM hw,proc WHERE hw.id=proc.hardware_id AND hw.name LIKE :servername ORDER BY hw.name;"; 
$dbh = new PDO("mysql:host=*****;dbname=*****","*****","*****"); 
$stmt = $dbh->prepare($query); 
$stmt->bindValue(":servername","$servername%"); 
$stmt->execute(); 
if ($stmt->execute() != TRUE) { 
     print "Erreur requete SQL"; 
     print_r($stmt->errorInfo()); 
} 
$results=$stmt->fetchAll(); 

現在我需要使用2個不同的查詢,並把它們放置到同一個陣列:

$results=$stmt->fetchAll(); 

所以我有想法,使2查詢,並將它們放到同一個$結果直接像這樣。

$query= "SELECT hw.name as server, proc.cmd as cmd, proc.pid as pid, proc.ppid as ppid FROM hw,proc WHERE hw.id=proc.hardware_id AND hw.name LIKE :servername ORDER BY hw.name;"; 
$query2= "SELECT hw.name as server, svc.servicename as svc, svc.displayname as svcname FROM hw,svc WHERE hw.id=svc.hardware_id AND hw.name LIKE :servername ORDER BY hw.name;"; 
$dbh = new PDO("mysql:host=*****;dbname=*****","*****","*****"); 
$stmt = $dbh->prepare($query,$query2); 
$stmt->bindValue(":servername","$servername%"); 
$stmt->execute(); 
if ($stmt->execute() != TRUE) { 
     print "Erreur requete SQL"; 
     print_r($stmt->errorInfo()); 
} 
$results=$stmt->fetchAll(); 

對於我修改了:$stmt = $dbh->prepare($query,$query2); 但是,這是行不通的。

你有任何想法如何將2個SQL查詢放入同一個數組嗎?

或者,也許,如何創建2個數組,並與他們一個?

在此先感謝。

+0

我不沒有理由有兩個查詢,你能解釋一下,也許我們可以只用一個查詢來獲得預期的結果 –

+0

我沒有理解有一個數組的問題:第一個查詢返回一個進程列表,第二個查詢返回一個進程列表它似乎是一個服務列表。兩個查詢都有不同的列。那麼對連接有什麼用處:它會給出流程和服務的組合。 UNION有什麼用處:需要添加多個虛擬列。我認爲:兩個查詢和兩個結果集將是最好的解決方案。 – VMai

+0

準確地說,我想爲兩個查詢使用一個數組,因爲我在其他許多部分中分塊了結果數組。 其實我試圖做:2查詢,3array(2 arrayquery和1結果與「array_merge」),但這是在我的腳本太多的行....... 我希望你能幫助我,因爲結果完美的地方。 – user3114471

回答

-1

去最好的辦法是通過UNION子句來合併這兩個查詢:

SELECT hw.name as server, proc.cmd as cmd, proc.pid as pid, proc.ppid as ppid 
FROM hw,proc WHERE hw.id=proc.hardware_id AND hw.name LIKE :servername 
UNION 
SELECT hw.name as server, svc.servicename as svc, svc.displayname as svcname 
FROM hw,svc WHERE hw.id=svc.hardware_id AND hw.name LIKE :servername 
ORDER BY hw.name; 
+0

使用的SELECT語句具有不同數量的列。 – VMai

+0

@VMai說得對,這是造成真正的問題。 – user3114471

0

而是使用兩個sql語句,你可以在一個查詢中使用連接實現這一

$query= "SELECT hw.name as server, proc.cmd as cmd, proc.pid as pid, proc.ppid as ppid ,svc.servicename as svc, svc.displayname as svcname 
FROM hw 
INNER JOIN proc as proc ON proc.hardware_id = hw.id 
INNER JOIN svc on svc ON svc.hardware_id = hw.id 

WHERE hw.name LIKE :servername AND hw.name LIKE :servername 
ORDER BY hw.name"; 
+0

我不認爲這會真的有幫助,但至少這個查詢不會失敗。 – VMai

+0

不適合我:s ...謝謝 – user3114471

相關問題