2009-12-20 68 views
1

我寫了很多類似下面查詢示例代碼的查詢。我想知道是否有更高效的代碼/腳本?MySQL - 基於另一個查詢的查詢

$query1 ="SELECT * FROM table1 WHERE date >= '$todaysdate' "; 
$result1 = mysql_query($query1) 
    or die ("Error in query: $query1. " . mysql_error()); 
if (mysql_num_rows($result1) > 0) { 
    while($row1 = mysql_fetch_object($result1)) { 

     echo "$row1-date"; 

     $query2 ="SELECT * FROM table2 WHERE table1ID >= '$row1-table1ID' "; 
     $result2 = mysql_query($query2) 
      or die ("Error in query: $query2. " . mysql_error()); 
     if (mysql_num_rows($result2) > 0) { 
      while($row2 = mysql_fetch_object($result2)) { 
       echo "$row->datatable2"; 
      } 
     } 
    } 
} 
+4

我希望你的表格實際上並不叫做table1和table2;我希望你能夠理解如何避免SQL注入(如果不是,請使用StackOverflow上的搜索) – MarkR 2009-12-20 12:19:29

回答

9

嘗試使用SQL JOINs,像下面的例子:

SELECT 
    * 
FROM 
    table1 
INNER JOIN 
    table2 ON (table2.table1ID = table1.ID) 
WHERE 
    table1.date >= '2009-12-20'; 
+2

同意,SQL遠不止是「SELECT * FROM Where 」,我建議通過一個關於MySQL的教程到一個PHP教程的MySQL片段) – MatBailie 2009-12-20 14:47:54

-1


您可以使用PDO。
您的查詢應該是這樣..

$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

$result = $sth->fetchAll(PDO::FETCH_COLUMN); 
// OR 
$result = $sth->fetchAll(PDO::FETCH_OBJ); 
var_dump($result); 

PDO手冊:http://php.net/manual/en/book.pdo.php

+0

不回答這個問題。這是一個很好的暗示,但在這種情況下並不是他想要的。 – Franz 2009-12-20 14:27:14

1

我不知道你的表的結構,但我已經修改了你的代碼,以便它使用聯接:

$query = 'SELECT table1.date, table2.datatable2 FROM table1, table2 WHERE table1.date >= \''.$todaysdate.'\' AND table2.table1ID >= table1.table1ID'; 
$result = mysql_query($query) 
    or exit('Error in query: '.$query.' '.mysql_error()); 

if (mysql_num_rows($result) > 0) 
{ 
    while($row = mysql_fetch_object($result)) 
    { 
     echo $row->date; 
     echo $row->datatable2; 
    } 
} 

在這種情況下,你選擇從與逗號分隔的多個表,但你也可以使用內/外/左/右JOIN(見第一個答案的鏈接)。