我从我的php类2不同的方法中检索了2个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 :(得分:0)
目前尚不清楚position
列的来源,但我猜测produkt_module
和text_module
表格都有position
列。
要在SQL中执行此操作,您可以使用UNION并对组合结果进行排序。限制是UNIONed的两个结果必须具有相同的列数,并且列必须是兼容的类型:
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中对其进行排序。
答案 1 :(得分:0)
以下是如何在PHP中执行此操作。请注意,此代码假定position
在produkt_module
和text_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 */
}
}