2

次のようなテーブルがあります。

    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 個のクエリが実行されます。これを行う短い方法はありますか?

同様のものも1つ見つけましたが、それ以上進むことができませんでした:

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..
4

2 に答える 2

1

DISTINCT関数でキーワードを使用して、group_concat()個別の値をフェッチします。

このようにクエリを変更します -

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
于 2013-09-11T04:48:37.823 に答える
0

次のコードを使用して、SQL を 1 つだけ実行して目的の配列を取得できます。

$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']);
}
于 2013-09-11T04:21:10.030 に答える