2017-08-23 3 views
-1

最新のものから最新のものへのアクセスリストを注文する必要があります。これはテーブルの主キーIDを使って行うことができます。しかし今、私は2番目のキーで定義された同じドキュメントへのアクセスをグループ化したいと思います。だから、複雑なORDER BY MySQLの2つの代替列

この結果がある場合:...

  • 199985 CLASEただ、獣医+マルゾーソルSupuestos 254 Y 255 PARTEを
  • 199984 CLASEただ、獣医+マルゾーJurisdiccion Voluntaria(20 -...
  • 199983 CLASEただ、獣医+マルゾーソルSupuestos 254 Y 255 PARTE ...
  • 198911 CLASEただ、獣医+マルゾーRepaso Contencioso Administra ...
  • 198910 CLASEただ、獣医+マルゾーRepaso Contencioso Administra ...
  • 私が必要

この順に表示:

  • 199985 CLASEただ、獣医+マルゾーソルSupuestos 254 Y 255 PARTE ...
  • 199983 CLASEただ、獣医+マルゾーソルSupuestos 254 Y 255 PARTE .. 。
  • 199984 CLASEただ、獣医+マルゾーJurisdiccion Voluntaria(20 -...
  • 198911 CLASEただ、獣医+マルゾーRepaso Contencioso Administra ...
  • 198910 CLASEただ、獣医+マルゾーRepaso Contencioso Administra。 ...

私は

はあなたのすべて

+0

試したSQLとサンプルテーブルを提供できますか? –

答えて

0

これは良い質問ですありがとう...メインIDによってオーダーし、文書名でグループを必要とします。しかし、それはそう、私は次のようにあなたのテーブル構造があると仮定します例えば、テーブルやコードを欠い:

CREATE TABLE `test` (
    `id` int(10) UNSIGNED NOT NULL, 
    `name` varchar(255) NOT NULL 
) 

INSERT INTO `test` (`id`, `name`) VALUES 
(199985, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'), 
(199984, 'Clase Just Vet+Marzo Jurisdiccion Voluntaria (20-...'), 
(199983, 'Clase Just Vet+Marzo Sol Supuestos 254 y 255 Parte...'), 
(198911, 'Clase Just Vet+Marzo Repaso Contencioso Administra...'), 
(198910, 'Clase Just Vet+Marzo Repaso Contencioso Administra...'); 

私は少しトリッキーな要求された順序を見つけたので、私たちは、IDSが&を使用し、その後グループ化並べ替えを取得する必要がある最初の考えそれがあるサブクエリは、次のようにのように:あなたのあなたが1つの以上のRを返すサブクエリを使用することはできません知っているかもしれませんが

ids 
199985,199983 
199984 
198911,198910 

:結果を与える

SELECT GROUP_CONCAT(id) ids FROM `test` GROUP BY `name` ORDER BY `id` DESC 

を私がグループ化できる上記の結果には類似点がないので、別の列を追加してグループ内で使用するように別の列を追加する必要があります。

結果のクエリ:

SELECT GROUP_CONCAT(`ids`) FROM( 
      SELECT GROUP_CONCAT(id) ids, 'x' as `useful_column` 
      FROM `test` GROUP BY `name` ORDER BY `id` DESC) `table` 

これがうまく機能し、私たちは次のようにIDの結果を組み合わせて取得予想通り:あなたの質問に記載されたソート順序がある

199985,199983,199984,198911,198910 

を。

SELECT * FROM `test` ORDER BY FIND_IN_SET(`id`, 
(SELECT GROUP_CONCAT(`ids`) FROM( 
SELECT GROUP_CONCAT(id) ids, 'x' as `useful_column` FROM `test` 
GROUP BY `name` ORDER BY `id` DESC) `table`)); 

私はそれが面白い&を試してみたかったので、私はこの質問を通り抜けた覚えしてください:今、実際には次のようにあなただけを選択して、この結果を結合する必要が欲しいソート結果を取得しますこれを解決するためには、group_concatに制限があるため、このソリューションが利用できない可能性があります。& find_in_setの速さやその他の制限が実際にはわかりません。