0

次のような idpage に関連する製品を含むテーブルがあります。

+--------+-----------+-------------+-------------+
| idPage | idProduct | inputedName | inputedCode |
+--------+-----------+-------------+-------------+
|     25 |        60 | x           | 8924        |
|     26 |        65 | y           | 105555      |
|     26 |        70 | z           | 105555      |
|     27 |        33 | a           | 14151112    |
|     27 |        34 | a           | 14151112    |
|     27 |        22 | a           | 14151112    |
|     27 |        17 | b           | OS987456    |
|     27 |        18 | c           |             |
|     27 |        17 |             |             |
|     27 |        23 | a           | 14151112    |
+--------+-----------+-------------+-------------+

ID Unique はありません。

ユーザーがフォームに入力した InputedName と InputedCode。

ページ ビューでやりたいことは、InputedName x Inputed Code の DISTINCT の組み合わせを選択し、関連するすべての itens と交差または内部結合 (または何でも) を選択して、次のようなものを表示することです。

In idPage=27:
- a 141511112 (inputedName, inputedCode)
-- 33 (idProduct)
-- 34
-- 22
-- 23
- b OS987456
-- 17        
- c (null)
-- 18
- (null)(null)
-- 17

それを行うための優れた方法はありますか、それとも基本的な方法が最適ですか? 基本的な方法、つまり、私は PHP を使用しています。最初にinputedNameとinputedCodeのDistinctの組み合わせを選択し(テーブルでそれを行う方法はまだわかりません)、PHPのwhileコマンドで別のクエリを実行します。この場合、5 つのクエリを実行します。私はそれがエレガントな解決策だとは思いませんが、mysql が強力であることを知っているので、別の方法があるかもしれません。

4

1 に答える 1

2

私はあなたが何を求めているのか混乱していますが、これを試してみましょう:

SELECT  inputedName, inputedCode, GROUP_CONCAT(idProduct)
FROM    sampleTable
WHERE   idPage = 27
GROUP BY inputedName, inputedCode
order by COALESCE(inputedname, 'z'),   -- this part is optional
         COALESCE(inputedCode, 'z')    -- this part is optional

SQLFiddle デモ (ここをクリック)

于 2012-08-15T16:13:34.707 に答える