2012-05-11 102 views
0

我從我的PHP類2種不同的方法來獲得2個MySQL查詢和他們看,因爲它遵循PHP獲取MySQL查詢行

SELECT 
domains.id, domains.name, domains.meta_title, 
domains.meta_keywords, domains.meta_description, 
produkt_modul.keywords, produkt_modul.program_id,produkt_modul.title, produkt_modul.items, produkt_modul.search_type 
FROM domains 
JOIN produkt_modul ON domains.id = produkt_modul.domains_id WHERE domains.name='$domain_name' ORDER BY position 

被抓取,我的產品模塊 行,第二個

SELECT 
domains.id, text_module.position, text_module.title, text_module.text 
FROM domains 
JOIN text_module 
ON domains.id = text_module.domains_id 
WHERE domains.name='$domain_name' AND active= 1 ORDER BY position 

應該給我的文本模塊的行。

當我在視圖中生成行的html輸出時,我想在位置值後排序主題。

應該是什麼,例如像:

text_modul pos1 
prod_modul pos2 
prod_modul pos3 
text_modul pos4 

行的實際視圖看起來

text_modul1 
text_modul4 
prod_modul2 
prod_modul3 

我怎樣才能獲取這樣的行具有正確的順序主題。

回答

0

以下是如何在PHP中執行此操作。請注意,此代碼假設positionprodukt_moduletext_module結果中都是唯一的。

$allrows = array(); 
$res = mysql_query(/* your first query on produkt_module */); 
while ($row = mysql_fetch_assoc($res) { 
    $row['type'] = 'p'; 
    $allrows[$row['position']] = $row; 
} 

$res = mysql_query(/* your second query on text_module */); 
while ($row = mysql_fetch_assoc($res) { 
    $row['type'] = 't'; 
    $allrows[$row['position']] = $row; 
} 

ksort($allrows); // sort all rows by position 

foreach ($allrows as $pos => $row) { 
    if ($row['type'] == 'p') { 
     /* display a produkt_module row, i.e $row['title'], etc. */ 
    } elseif ($row['type'] == 't') { 
     /* display a text_module row */ 
    } 
} 
0

目前還不清楚position列的來源,但我猜produkt_moduletext_module表都有一個position列。

要在SQL中執行此操作,您可以使用UNION並對合並結果進行排序。該限制是兩個結果聯合在一起必須有相同的列數和列的類型必須兼容:

SELECT title, position FROM (
    SELECT p.title, p.position 
    FROM produkt_module p 
    JOIN domains d ON d.id = p.domains_id 
    WHERE d.name = '$domain_name' 
    UNION 
    SELECT t.title, t.position 
    FROM text_module t 
    JOIN domains d ON d.id = t.domains_id 
    WHERE d.name = '$domain_name' 
    AND t.active 
) ORDER BY position; 

你也可以閱讀這兩個結果集到一個數組和排序,在PHP。

+0

謝謝,我認爲聯盟不會在我的情況下帶來結果。不知何故,我必須讀取數組中的兩個查詢結果 – lgt