获取不同的用户,但关联所有其他行

时间:2014-11-06 18:36:35

标签: mysql sql group-by distinct

我不确定如何解释..我认为GROUP可能是我正在寻找的......但我从未使用它。

数据架构:

user1     col1   col2   col3   col4
user1     col1   col2   col3   col4
user1     col1   col2   col3   col4
user1     col1   col2   col3   col4
user2     col1   col2   col3   col4
user2     col1   col2   col3   col4
user2     col1   col2   col3   col4
user3     col1   col2   col3   col4
user3     col1   col2   col3   col4
user4     col1   col2   col3   col4
user4     col1   col2   col3   col4
user4     col1   col2   col3   col4
user4     col1   col2   col3   col4

etc..

我要做的是查询数据库并获取DISTINCT用户列表,但是还有其他所有用户。

example:

user1 col1   col2   col3   col4
      col1   col2   col3   col4
      col1   col2   col3   col4
      col1   col2   col3   col4

user2 col1   col2   col3   col4
      col1   col2   col3   col4
      col1   col2   col3   col4

user3 col1   col2   col3   col4
      col1   col2   col3   col4

等。

我不需要冗余的用户名。我只需要一次,但我需要与同一个用户关联的所有其他cols /行...直到新的不同用户上/下

我想使用GROUP?我不确定要搜索/使用什么来获得此结果。

我对MySQL不太熟悉..所以很容易阅读/理解查询或tut / link。

显然Group_Concate有一个大小限制..(这对我来说没什么好处)

新问题是我如何:

只选择/获取DISTINCT名称...但是要计算有多少名称?

示例:

First1  Last1
First1  Last1

First2  Last2

First3  Last3
First3  Last3
First3  Last3
First3  Last3

哪会回来:

First1 Last1 (2)
First2 Last2 (1)
First3 Last3 (4)

所以我只获得每个独特的名字一次......但也总共得到了多少次(数?)?

更新:使用RADAR的最后答案(在他的评论中)

我需要以某种方式将其整合到我当前的搜索查询中:(我使用的是PDO)

我需要以某种方式将其集成到我当前的查询中,因为它只是在用户将用于搜索的可能字段数组上使用%like%:

// define the list of fields (easier to loop through and check for values)
$searchFields = array('first', 'last', 'suffix', 'trialdate', 'wcity', 'wstate', 'plaintiff');    
$searchConditions = array();

//loop through the defined fields & build query
foreach($searchFields as $searchField){
    // if the field is set and not empty
    if(isset($_POST[$searchField]) && $_POST[$searchField] != '') {

        $searchConditions[] = "`$searchField` LIKE '%" . $_POST[$searchField] . "%'";
    }
}

//build the query
$getExperts_sql = "SELECT * FROM $tablename";


// if there are conditions defined
if(count($searchConditions) > 0) {
    // append the conditions
    $getExperts_sql .= " WHERE " . implode (' AND ', $searchConditions); // you can change to 'OR', but I opt'd to apply the filters cumulative
}

我需要以某种方式获得RADAR发布的内容..但也能够获取行数据/内容以填充页面?

我想这会做到:

select *, count(*) from lnExpertWitness group by first,last;

1 个答案:

答案 0 :(得分:1)

最好在应用层完成

你可以对mysql中的变量做同样的事情

select
  @num := if(@user_name = user, @num + 1, 1) as row_number,
  @user_name := user as dummy,
  (case when @num = 1 then user else '' end) as user, col1, col2, col3, col4

from Table1, (select  @num := 0, @user_name:= '' ) t

要获取计数,请使用GROUP BY

select col1, col2 , count(*)  as TotalCount
from table1 
group by col1,col2