2012-05-11 92 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