PHP/MySql:Select DISTINCT某些列不允许访问其他列

PHP/MySql:Select DISTINCT某些列不允许访问其他列,php,mysql,sql,Php,Mysql,Sql,假设我得到了以下数据库: id name value other 1 Dave 340 otherinfo 2 Dave 340 otherinfo 3 Mike 350 otherinfo 我只需要具有唯一名称和值的行,因此我使用以下sql语句: SELECT DISTINCT 'name', 'value' from TABLE 不,我得到了我想要的行(1和3),但我无法访问其他列。 所以$row[name]和$row[value]给我选择的信息,但例如$row[other]给空值。我该

假设我得到了以下数据库:

id name value other
1 Dave 340 otherinfo
2 Dave 340 otherinfo
3 Mike 350 otherinfo
我只需要具有唯一名称和值的行,因此我使用以下sql语句:

SELECT DISTINCT 'name', 'value' from TABLE
不,我得到了我想要的行(1和3),但我无法访问其他列。
所以$row[name]和$row[value]给我选择的信息,但例如$row[other]给空值。我该如何选择这些栏目呢?

只是回答一下我的评论

首先,您不希望引用列名,其次,如果需要其他列,您只需指定它们:

SELECT DISTINCT name, value, other FROM your_table
也就是说,
DISTINCT
应用于所有指定的列,因此它可能不是您想要的。通过使用
分组方式
,您将获得更多控制权。此查询将提供与上面相同的内容:

SELECT name, value, other FROM your_table GROUP BY name, value, other
或者,如果您希望获取具有不同名称的行并返回其他列

SELECT name, value, other FROM your_table GROUP BY name

可以使用派生表

DECLARE @thetable TABLE (id int, [name] varchar(100), [values] int, other varchar(100))
INSERT INTO @thetable VALUES (1, 'Dave', 340, 'otherinfo'), (2, 'Dave', 340, 'otherinfo'), (3, 'Mike', 350, 'otherinfo')

SELECT TT.*
  FROM (
        SELECT MIN(id) [minID] --take the minID by name, values
             , [name], [values]
          FROM @thetable
        GROUP BY [name], [values]
       ) AS dT INNER JOIN @thetable TT ON dT.minID = TT.id 
               --rejoin the derived output by minID = @thetable.id
产生:

id  name    values  other
1   Dave    340     otherinfo
3   Mike    350     otherinfo

所需的结果是什么样的?您必须指定所需的列或使用
*
。另外,
groupby
语法比
DISTINCT
提供了更多的控制。最后,当前代码将为您提供文本字符串
'name'
'value'
。。。它们应该被取消引用。代码是伪代码,我将根据建议尝试分组。@Cuchu不,不是,也不是骂人。
DISTINCT
关键字适用于
SELECT
列表中的所有表达式,而不仅仅是第一列。@spencer7593您是正确的。我已经修复了我的示例。虽然这会起作用,但它也会非常慢,而且OP想要做的事情非常复杂。@Cfreak我同意,肯定有不同的方法来做,例如在使用DISTINCT后使用MIN(id)。这个想法是为了让每个专栏都能访问,因为OP抱怨“失去专栏”。