2012-10-08 184 views
2

我有一個查詢,得到5行數據像下面查詢MySQL中運行查詢

$query = "SELECT ref,user,id FROM table LIMIT 0, 5"; 
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
$ref = $row['ref']; 
} 

我想運行下面

$query = "SELECT ref,user,id FROM table LIMIT 0, 5"; 
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
$ref = $row['ref']; 
$query = "SELECT domain,title FROM anothertable WHERE domain = '$ref'"; 
$result = mysql_query($query) or die(mysql_error()); 
if (mysql_num_rows($result)) 
{ 
$title = $row['title']; 
} else { 
$title = "No Title"; 
} 
echo "$ref - $tile"; 
} 

每個結果像這裏面的查詢這個例子,但出於某種原因,它只在我添加查詢時顯示第一行。我似乎可以讓它運行所有5個查詢。

回答

1

您可以在while循環中更改$ query的值。 將變量名稱更改爲不同的名稱。

例:

$query = "SELECT ref,user,id FROM table LIMIT 0, 5"; 
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
$ref = $row['ref']; 
$qry = "SELECT domain,title FROM anothertable WHERE domain = '$ref'"; 
$rslt = mysql_query($qry) or die(mysql_error()); 
if (mysql_num_rows($rslt)) 
{ 
$title = $row['title']; 
} else { 
$title = "No Title"; 
} 
echo "$ref - $tile"; 
} 
+0

哇,我覺得自己很蠢,沒想到這是一個問題,但我明白爲什麼現在。有用。謝謝! – chillers

+0

@DanielO沒問題。 – User404

2
SELECT 
    t1.ref, 
    t1.user, 
    t1.id, 
    t2.domain, 
    t2.title 
FROM 
    table AS t1 
    LEFT JOIN anothertable AS t2 ON 
     t2.domain = t1.ref 
LIMIT 
    0, 5 
0

瞭解SQL joins

SELECT table.ref, table.user, table.id, anothertable.title 
FROM table LEFT JOIN anothertable ON anothertable.domain = table.ref 
LIMIT 5 
+0

如果在另一個數據庫中沒有標題,我需要運行其他php代碼。儘管謝謝! – chillers

+0

@DanielO:你可以在加入的結果集上測試這個條件... – eggyal

0

你在你的循環變化的$result值。將您的第二個查詢更改爲使用其他變量。

2

問題是,在while循環中,你使用相同的變量$result,然後被覆蓋。在while循環中使用$result的另一個變量名稱。

+0

使用一些代碼來得到答案。 –

1

使用以下:

$query = "SELECT ref,user,id FROM table LIMIT 0, 5"; 
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
    $ref = $row['ref']; 
    $query_domain = "SELECT domain,title FROM anothertable WHERE domain = '$ref'"; 
    $result_domain = mysql_query($query_domain) or die(mysql_error()); 
    if (mysql_num_rows($result_domain)) 
    { 
     $row_domain = mysql_fetch_row($result_domain); 
     $title = $row_domain['title']; 
    } else { 
     $title = "No Title"; 
    } 
    echo "$ref - $title"; 
} 
0

它沒有給予適當的結果,因爲你已經使用同一名稱兩次,使用不同的名稱,這樣的編輯。

$query = "SELECT ref,user,id FROM table LIMIT 0, 5"; 
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
    $ref = $row['ref']; 
    $query1 = "SELECT domain,title FROM anothertable WHERE domain = '$ref'"; 
    $result1 = mysql_query($query1) or die(mysql_error()); 
    if (mysql_num_rows($result1)) 
    { 
     $title = $row['title']; 
    } else { 
     $title = "No Title"; 
    } 
    echo "$ref - $tile"; 
} 
1

這是一個合乎邏輯的問題。它發生這種情況,因爲你在循環內部和外部是相同的變量名稱。

說明:

$query = "SELECT ref,user,id FROM table LIMIT 0, 5"; 
$result = mysql_query($query) or die(mysql_error()); 
// Now $results hold the result of the first query 

while($row = mysql_fetch_array($result)) 
{ 
    $ref = $row['ref']; 

    //Using same $query does not affect that much 
    $query = "SELECT domain,title FROM anothertable WHERE domain = '$ref'";  

    //But here you are overriding the previous result set of first query with a new result set 
    $result = mysql_query($query) or die(mysql_error()); 
    //^ Due to this, next time the loop continues, the $result on whose basis it would loop will already be modified 

//.............. 

解決方案1:

避免使用相同的變量名爲內結果集

$query = "SELECT ref,user,id FROM table LIMIT 0, 5"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) 
{ 
    $ref = $row['ref']; 
    $query = "SELECT domain,title FROM anothertable WHERE domain = '$ref'";  
    $sub_result = mysql_query($query) or die(mysql_error()); 
    //^Change this variable so that it does not overrides previous result set 

解決方案2: 避免雙重查詢小號ituation。使用連接在一個查詢調用中獲取數據。 (注:你應該總是嘗試優化您的查詢,讓您將最大限度地減少服務器上的查詢數量

SELECT 
    ref,user,id 
FROM 
    table t 
INNER JOIN 
    anothertable t2 on t.ref t2.domain 
LIMIT 0, 5