2016-04-07 5 views
1

は、私は、クエリを持って存在している場合、正確なレコードを選択:グループ化されたグループではなく

SELECT * FROM wp_silumos_suvartojimas 
WHERE katiline_name = 'Dukstynos mikrorajonas' 
GROUP BY kainam2 
ORDER BY kainam2 ASC 
LIMIT 10 

結果:グループ化されていない

enter image description here

結果:

enter image description here

更新を:

特定のフィールド(kainam2)と でmy resultsetをグループ化します。グループ内のレコードには特定の値のadresasがあり、グループのレコードを返します。 グループ内のレコードに指定された値のadresasがない場合は、グループのランダムレコードを返します。

IDの22と164の行が同じkainam2値を持つことがわかります。しかし、グループ化された結果では、1行しか得られず、どちらを制御したいのですか。私は、列adresasに対してそれを一致させたい:もし$ some_var = adresas

+5

あなたの質問*は意味がありません(少なくとも私にはない)。サンプルデータと望ましい結果を含めるように質問を編集すると、本当に役に立ちます。 –

+2

一般的なGROUP BYルールでは、「GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。 – jarlh

+0

私は、集計をしておらず、単にグループ内に行を投影したいので、 'ORDER BY'節だけが必要だと思います。 – Ambrish

答えて

0

あなたがしたい場合は、次の

  • 特定のフィールド(kainam2)でグループあなたの結果セット、および
    • レコードからのグループ内の特定の値がadresasであれば、グループのレコードを返します。
    • グループ内のレコードに指定された値がadresasでない場合は、グループのランダムレコードを返します。

- あなたがない結果セットが指定された値を持っていますが、レコードががないことが存在するグループにあるからすべてのレコードを除外してMySQLで行うことができます指定を持っています値。そのよう

SELECT * FROM wp_silumos_suvartojimas s 
WHERE s.katiline_name = 'Dukstynos mikrorajonas' and 
(s.adresas = $some_var or 
not exists 
(select 1 FROM wp_silumos_suvartojimas e 
    WHERE e.katiline_name = 'Dukstynos mikrorajonas' and 
     e.kainam2 = s.kainam2 and 
     e.adresas = $some_var)) 
GROUP BY kainam2 
ORDER BY kainam2 ASC 
LIMIT 10 
+0

これはまさに私がやってみたいことです。今すぐ試してステータスを更新しようとしています。 – RomkaLTU

+0

非常に近いものの、期待どおりに動作していません。このSQLはe.adresas = $ some_varで行を返しませんでした。だからもし私がe.adresas = 'Anykščiųg。 35 'の場合、ID 164とID 22の両方の行はなくなります。 – RomkaLTU

+0

@RomkaLTU:私は質問に論理的な誤りがあることを知りました - 私はそれを修正しましたので、今すぐ動作するはずです。 –

0

私は解決策を見つけたので、[OK]を、それはですが、それがどのように動作するか愚かなのか分かりません。 @Mark Ba​​nnesterの提案に基づいています。

SELECT * FROM wp_silumos_suvartojimas s 
WHERE s.katiline_name = 'Dukstynos mikrorajonas' 
AND NOT EXISTS 
(SELECT 1 FROM wp_silumos_suvartojimas e 
WHERE e.katiline_name = 'Dukstynos mikrorajonas' AND 
e.kainam2 = s.kainam2 AND 
e.adresas = 'Anykščių g. 35') 
OR EXISTS 
(SELECT 1 FROM wp_silumos_suvartojimas e 
WHERE e.katiline_name = 'Dukstynos mikrorajonas' AND 
e.kainam2 = s.kainam2 AND 
s.adresas = 'Anykščių g. 35') 
GROUP BY kainam2 
ORDER BY kainam2 ASC 
LIMIT 10 
関連する問題