是否有一种方法可以在单个查询中选择SELECT并与相关子查询相交?

时间:2012-08-15 15:48:18

标签: mysql subquery distinct

我有一个表格,其中包含与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唯一。

用户在表单上输入InputedName和InputedCode。

我想在页面视图上做的是选择DISTINCT InputedName x Inputed Code和相交或内部连接(或其他)的组合以及所有相关的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的区别组合(我仍然不知道如何用我的表做)和PHP的while命令我会做另一个查询。在这种情况下,它将进行5次查询。我不认为这是一个优雅的解决方案,但据我所知,mysql功能强大,也许还有另一种方式。

1 个答案:

答案 0 :(得分: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 Demo (Click Here)