0

私の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

製品モジュールと 2 番目の製品モジュールの行を取得しています

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

テーマが正しい順序になるように行をフェッチするにはどうすればよいですか。

4

2 に答える 2

0

position列がどこから来ているのかは明確ではありませんが、テーブルprodukt_moduletext_moduleテーブルの両方にposition列があると思います。

SQLでこれを行うには、UNIONを使用して、結合された結果を並べ替えることができます。制限は、一緒にUNIONされた2つの結果は同じ数の列を持ち、列は互換性のあるタイプでなければならないということです。

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で並べ替えることもできます。

于 2012-05-11T05:52:20.047 に答える
0

これを PHP で行う方法を次に示します。このコードは、と結果positionの両方で一意であると想定していることに注意してください。produkt_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 */
    }
}
于 2012-05-11T06:28:46.137 に答える