簡體   English   中英

選擇不同組的不同值

[英]Select distinct values of distinct group

我有一個與此類似的表:

    id  title  year
    ---------------
    1    abc   1999
    2    abc   2000
    3    abc   2000
    4    abc   1998
    5    bce   1999
    6    bce   1999
    7    def   1999
    8    def   1999
    9    def   2000

我試圖得到一個類似於的數組

array('abc' => 'array(1999,2000,1998)', 'bce' => 'array(1999)', 'def' => 'array(1999, 2000)');

我知道很長一段時間,我認為它很耗時:

PHP:
$rid = mysql_query("SELECT DISTINCT title from table_name ORDER BY ASC);
while($arr = mysql_fetch_array($qr)){
   $title = $arr
   $rid = mysql_query("SELECT DISTINCT title from table_name ORDER BY ASC);
   $yearArr = array();
   while($arr2 = mysql_fetch_array($qr)){
      $yearArr[] = $arr2['year'];
   }
   $finalArr = array(title => $yearArr);
}

最終,我得到了所要查找的數組,但是從上面的代碼中,如果我有1000個不同的標題,則整個過程將執行1001個查詢。 有什么簡短的方法嗎?

我也找到了一個類似的例子,但是,我無法走得更遠:

SELECT DISTINCT year,title FROM table_name WHERE title IN (SELECT DISTINCT title FROM papers_scanned_01) ORDER BY title ASC, year DESC

使用上面的查詢,我得到如下數組

array( [0] => 'abc', [1] => '1999', [2] => '2000', [3] => '1998', [4] => 'bce' and so on..

group_concat()函數中使用DISTINCT關鍵字來獲取不同的值。

像這樣修改您的查詢-

SELECT title, group_concat(DISTINCT year) as years
FROM tb1
group by title

小提琴-http://www.sqlfiddle.com/#!2 / 0812a /4

輸出 -

TITLE   YEARS
abc     1999,2000,1998
bce     1999
def     1999,2000

您可以使用以下代碼僅執行1條SQL即可獲得所需的數組

$sql = "SELECT title, group_concat(year) as years FROM table_name group by title"
$rs = mysql_query($sql);
$arr = array();
while($row = mysql_fetch_assoc($rs)) {
   $arr[$row['title']] = explode(',',$row['years']);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM