-1

SQL をよく知っている人にとっては簡単な質問のように思えますが、私にとってはそうではありません。

とにかく、ここにサンプルテーブルがあります:
サンプルテーブル

主な (そして唯一の) キーはidにあります。したがって、基本的にシナリオは休閑地です。ユーザーは画像を追加できます。新しく追加された画像は、重複を避けるためにcomune_number0で挿入されます (ファイル名 = PHP 経由の画像)。挿入された画像は、別のテーブルからカテゴリに割り当てることができます。同じ画像を多くのカテゴリに割り当てることができます。それぞれに、カテゴリ ID (comune_number) を持つ新しい行が挿入されます。2 つのテーブル間の関係はcomune_numberにあります。

すでに割り当てられているチェックボックスをオンにして、画像を表示したいと思います。
私の質問は簡単です。すべての画像を一度に含める方法、ただし同じ画像が既に割り当てられている場合は、0 の代わりにその comune_number を含めます。順序は気にしません。私が達成したい結果は次のようなものです:
サンプル結果

私はGROUP BYを知っているので、試してみると

mysql_query("SELECT * FROM banner WHERE `comune_number` = 0");  

また

mysql_query("SELECT * FROM banner GROUP BY `image`");  

私は同じ(望ましくない)結果になります。

ほとんどの場合、2 つのクエリを 1 つに結合する必要がありますが、どれをどのように組み合わせるかわかりません。

注1:私の(ほとんど)知識とGoogleで見つけたもの(Stackoverflowを含む)に基づいて、phpMyAdminで多くの組み合わせを試しましたが、どれも示されているような結果にはなりませんでした。

注 2 : MySQL バージョン 5.1

MYSQL のみ、または PHP ソリューションとの組み合わせは大歓迎です。

編集

comune_number を保持する必要があります。そのため、画像を表示するときは、ID を知る必要があります。
私のクエリは comune_number に依存する必要があるため、comune_number = 10 が必要な場合、結果は上の 2 番目の画像のようになります。

EDIT2

どうやら私は自分自身を明らかにしていないようです。だから私が欲しいのは、ユーザーがID 10のカテゴリを見ているときに、すべての画像を一度見せて、そのカテゴリに割り当てられたものをマークすることです。
別の例はこちらです。したがって、ユーザーが id=9 のカテゴリ (comune_number) を見ている場合、すべての写真を 1 回表示し、それに割り当てられた 2 つをマークします。

ここに画像の説明を入力

4

4 に答える 4

2

あなたの SQLFiddle とここにあるすべてのコメントに基づいて、更新されたクエリは次のとおりです。

   SELECT r.* 
     FROM (SELECT b.* 
             FROM banner b
            WHERE b.comune_number = 9
UNION ALL
           SELECT b2.*
             FROM banner b2
            WHERE b2.comune_number = 0
         GROUP BY b2.image) r
 GROUP BY r.image;

ライブデモ。

于 2013-07-22T12:30:27.630 に答える
1
select * from 
(SELECT * FROM banner order by 
FIELD(comune_number,10,0))
abc  group by `image`;

フィドル

更新しました:

フィルタ条件を使用したクエリ:

select * from 
(SELECT * FROM banner
where comune_number in (10,0) order by 
FIELD(comune_number,10,0))
abc  group by `image`;
于 2013-07-22T12:30:42.903 に答える
-1

これがまさにあなたが必要としているものかどうかはわかりませんが、役立つと思います.これを試してください:

Select if(comune_number = 10, comune_number,0), id, image from table

comune_number は都合に合わせて変更できます。IF 条件でさらにネストすることも可能です。

于 2013-07-22T13:14:18.233 に答える