0

私は3つのテーブルを持っています:

+-----------------+
| | 検証 |
+----+-------+----+
| | ID | パラメータ | ...
+----+---------+
+------------------+
| | 交換 |
+----+-------------+
| | ID | 交換 |
+----+-------------+
+--------------------------------+
| | 検証置換 |
+--------------+----------------+
| | validation_id | replacement_id |
+--------------+----------------+

今、そのテーブルで SQL クエリを実行しています (もちろん、結合を使用して)。そして、PHPで受け取るのはsth. そのように:

...
[6] => stdClass オブジェクト
(
    [ID] => 11
    [search_param] => Dänische Belletristik
    [置換] => デンマーク
)

[7] => stdClass オブジェクト
(
    [ID] => 11
    [search_param] => Dänische Belletristik
    [差し替え] => フィクション
)
...

さて、私の PHP-Array には、同じ「search_param」と「id」が複数回あります。それを画面に印刷するのは面倒です。それを避けるために「id」でデータをグループ化することもできますが、利用可能な「置換」値は 1 つしかありません。

私が探しているのは、次のような結果です。

...
[7] => stdClass オブジェクト
(
    [ID] => 11
    [search_param] => Dänische Belletristik
    [置換] => array(デンマーク、フィクション)
)
...

私が知りたいこと: クエリを修正するだけで、私のテーブル構造でそれは可能ですか? または、PHPコードでそれを気にする必要がありますか?もしそうなら:最善の方法を教えてください。たくさんのデータがあります... テーブル構造は正しいですか? データベースに関しては、まだ少し確信が持てません...

よろしくお願いします。

4

2 に答える 2

1

特定の検索パラメーターのすべての置換を表示したいようですか? クエリが次のようなものであると仮定します。

SELECT * 
FROM validations_replacements vr 
INNER JOIN validations v ON v.id = vr.validation_id 
INNER JOIN replacements r ON r.id = vr.replacement_id
WHERE v.param = '$search_param'

結果オブジェクトが であると仮定して、結果配列をいじって、PHP でそれらをグループ化することができます$results

$replacements = array() ;
foreach ($results as $result) {
    $currSearchParam = $result['search_param'];
    $currReplacement = $result['replacement'] ;
    if (!isset($replacements[$currSearchParam])) {
        $replacements[$currSearchParam] = array() ;
    }
    $replacements[$currSearchParam][] = $currReplacement;
}

//I'll let you fill in the blanks like object id or naming the array keys as you wish

または、mysql で実行してから、PHP で結果を繰り返すだけです。

SELECT v.id, v.param, GROUP_CONCAT(r.replacement)
FROM validations_replacements vr 
INNER JOIN validations v ON v.id = vr.validation_id 
INNER JOIN replacements r ON r.id = vr.replacement_id
WHERE v.param = '$search_param'
GROUP BY v.id

を使用GROUP_CONCATすると、検索パラメーターごとに単一の結果行がすべて取得され、そのすべての置換がコンマ区切りの文字列で取得されます。これは、PHP で結果を反復処理することで簡単に操作できます。

$replacements = array() ;
foreach ($results as $result) {
    $currSearchParam = $result['search_param'];
    $currReplacements = $result['replacements'] ;
    $replacements[$currSearchParam] = explode(',', $currReplacements) ;
}
于 2011-01-25T22:58:50.397 に答える
0

使えそうですねGROUP_CONCAT

于 2011-01-25T23:02:18.160 に答える