2012-12-14 107 views
0

你好我想查詢多個相同的表在我的數據庫有不同的前綴,並顯示結果隨機,但不知何故,我需要追蹤項目的起源和我無法弄清楚如何MySQL從多個相同的表中選擇,並隨機顯示結果與PHP

我喜歡這樣的查詢,因爲我沒有訪問INFORMATION_SCHEMA

$query = "SHOW TABLES FROM mydb WHERE RIGHT(tables_in_mydb, 5) = 'table'"; 
$res = mysql_query($query); 
$num = mysql_num_rows($res); 

while($row = mysql_fetch_row($res)) { 

$numbers = explode('_', $row[0]); 

    if($num > 0) { 
    $q = "SELECT `this`, `that`, `something` FROM ".$numbers[0]."_idetinticaltables"; // :) 
    $r = mysql_query($q); 
    while($c = mysql_fetch_array($r)) { 
     /*display the results randomly with an identifier where the come from*/ 
    } 
    } 
} 
+0

在某處存儲$ numbers [0],因爲這就是告訴你數據來自哪個表的數據。 –

回答

0

你可以使用ORDER BY RAND()隨機排序它

+0

它是一個好主意,但是如果我將結果打印出來的話,它將隨機排列,而不是如下所示:隨機順序爲table1,順序隨機順序爲table2,隨機順序爲tableX,我希望將整個結果隨機化比如:table4,table1,table3,table2 –

+0

那麼,你不能在SHOW TABLES上使用ORDER BY,所以你需要把引用放到一個數組中,然後對這些名稱使用shuffle($ ar),並使用循環顯示也隨機結果。聽上去怎麼樣? – Moseleyi

0
$aa=array() 
while($c = mysql_fetch_array($r)) 
{ 
    /*display the results randomly with an identifier where the come from*/ 
    $aa[]=$c; 
} 
echo $aa; // print "Array" 
+0

myabe我錯了,但是如果你在循環之外回顯$ aa,它將只打印數組的第一項。 –

+0

@LaciK:好吧,它只是輸出'Array'就是這樣。不是一個答案,不要打擾它。 – hakre

0

以下可能有效:

  1. 獲取您感興趣的表的列表。您已經這樣做了。
  2. 創建一個UNION of multiple SELECT statements。每個SELECT聲明不同的表被選中並添加設置表中的名稱的列(所以你以後就能認出它):

    (SELECT *, TABLENAME = 'first_name_of_table' FROM first_name_of_table ...) 
    UNION 
    (SELECT *, TABLENAME = 'second_name_of_table' FROM second_name_of_table ...) 
    UNION 
    ... 
    ORDER BY RAND() LIMIT 10; 
    
  3. 因爲它是一個UNION你可以隨機整個訂單然後。請參閱How can i optimize MySQL's ORDER BY RAND() function?,因爲它不是很簡單,上面的示例是只有有一個ORDER BYLIMIT子句放在那裏。在表中有很多條目時,它會殺死你的服務器。

相關問題