如何从sql表中提取值

时间:2011-05-20 12:06:39

标签: php sql database

> ID    ProductID   OptionName  OptionValue             SKU
> 
> 1           709      Title      Como  test
> 2           709     Color          Cobalt test
> 3           709     Color          Crimson            RNA.331.02.MM1K
> 4           709     Title          Como G2            RNA.331.02.MM1K
> 7           709     Color          another color      test ipn
> 8           709     Title          another title      test ipn

从上表中我想要以下

Select distinct OptionName from myTable where ProductID = 709 group by OptionValue

但是sql server在group by子句中给出了错误,并且不知道如何将所有不同的值分组到不同的OptionName?

或者我不能?

我想要的结果如下

[0] => array

    [Color] => array
        [0] => Cobalt test
        [1] => Crimson
        [2] => another color
   [Title] => array
       [0] => Como test
       [1] => Como G2
       [2] => another title

4 个答案:

答案 0 :(得分:2)

当你有GROUP BY子句时,你需要在字段上使用聚合函数(比如FIRST(),LAST(),MAX(),AVG()......)。此外,如果您有GROUP BY,则不需要distinct。你能解释一下你想要提取的数据,而不仅仅是发布错误的查询吗?

修改

SELECT OptionName, OptionValue FROM myTable WHERE ProductID = 709 ORDER BY OptionName ASC

会产生这个:

> OptionName    OptionValue             
> 
> Color          Cobalt test
> Color          Crimson                
> Color          another color   
> Title          Como   test    
> Title          Como G2
> Title          another title

转换为数组等是您在应用程序中必须执行的操作,而不是SQL。

答案 1 :(得分:1)

这是一个解决方案

Select OptionName from myTable where ProductID = 709 limit 1

为什么group by有一个下划线

答案 2 :(得分:1)

尝试不使用此选项并使用OptionValue

select OptionName
from myTable 
where ProductID = 709 
group by OptionName, OptionValue

使用GROUP BY将为您提供不同的组合。

答案 3 :(得分:0)

使用GROUP BY OptionValue你说的是这个...... - 正常查询我的查询中的所有记录 - 具有相同OptionValue的组记录 - 每个组只返回一条记录

在您的情况下,然后尝试返回OptionName。这是一个问题,因为每组显示多个OptionName,但每组只显示一条记录。


正如已经说过的那样,正确的查询取决于你需要什么,而且我不是100%清楚你所写的内容。 (给出一个你需要的结果的例子,以及如何得到这些结果,会有所帮助。)


我猜你只想要两条记录(ColorTitle)。如果是这样,你可以做其中任何一个......

SELECT DISTINCT OptionName FROM myTable WHERE ProductID = 709

SELECT OptionName FROM myTable WHERE ProductID = 709 GROUP BY OptionName