0

私は現在、すべてが相互に接続されているいくつかのテーブルに情報が保存されているプロジェクトに取り組んでいます。表と列の形式は論理的であり、最良の選択だと思います。ただし、問題は、必要なすべての情報を取得するのに十分な高度なクエリを作成するための十分な知識がないことです。

主なテーブルは、広告が格納される ab_ads です。これらの広告には複数のフォーマット (250x360、980x120 など) を割り当てることができ、表示する地域 (スコーネ、ストックホルム、カルマル、ダーラナ、イェムトランドなど) を選択することもできます。

これが私のデータの保存方法です。すべての表を表示しているわけではありませんが、これで十分だと思います。

広告列 (ab_ads): (他にも列がありますが、関係ありません)

ID    orgnum         company_name   title           content         link
1     556664-7524    Company Inc    Lorem ipsum     Lorem ipsum     URL

広告の状態 (ab_ads_states):

ID    adID    stateID
1     1       2             // Skåne
2     1       5             // Kalmar
3     1       8             // Stockholm
4     1       10            // Värmland
5     2       2             // Skåne
6     2       5             // Kalmar
7     3       8             // Stockholm
8     4       10            // Värmland

広告フォーマット (ab_ads_formats)

ID    adID    formatID
1     1       1             // 250x360
2     1       2             // 980x120
3     2       1             // 250x360
4     3       2             // 980x120

フォーマット テーブル (ab_formats)

ID    name        width    height
1     Format 1    250      360
2     Format 2    980      120

だから、私は 2 つのフラッシュ バナーを持っています。どちらも PHP スクリプトを呼び出すことになっています。PHP スクリプトは、すべての結果を含む XML ファイルを返すことになっています。

さまざまなテーブルからデータを選択する方法は知っていますが、別のテーブルから複数の行を選択して 1 つにマージしたことはありません。これは、ここで行う必要があると思います。私が得ることができるどんな助けにもとても感謝しています.

Flash バナーは、2 つのパラメーターを PHP ファイルに送信しstateIDますformatID。つまり、私はしなければなりませんSELECT ad WHERE state = param AND format = format。しかし、広告状態の複数のエントリを保存しているため、その方法がわかりません。

編集: クエリで形式名を取得し、次の形式で取得したいと思います:「形式」という名前の列の「形式 1、形式 2」。これには何らかの参加が必要だと思いますか?

前もって感謝します!

4

2 に答える 2

1

私はこれがうまくいくと思います:

select ab.name as formats, aa.* from ab_ads as aa
inner join ab_ads_states as aas on aa.id = aas.adid and aas.stateId = stateIdParam
inner join ab_ads_formats as aaf on aa.id = aaf.adid and aaf.formatId = formatIdParam
inner join ab_formats as ab on aaf.formatid = ab.id

編集:私はmySqlがあまり得意ではなく、これをテストするものは何もありませんが、group_concatがあなたが探しているものかもしれないと思います. その場合、おそらく次のようになります。

select group_concat(ab.name separator ", ") as formats from ab_ads aa
inner join ab_ads_states as aas on aa.id = aas.adid and aas.stateId = 2
inner join ab_ads_formats as aaf on aa.id = aaf.adid and aaf.formatId in(1,2)
inner join ab_formats as ab on aaf.formatid = ab.id
group by ab.id
于 2012-12-14T14:11:52.187 に答える
0

以下のSQLを試してください:

SELECT count(aaf.ID) AS TotalFormat,
   group_concat(ab.name) AS formats
FROM ab_ads aa
INNER JOIN ab_ads_states AS aas ON aa.ID = aas.adID
AND aas.stateID = 2
INNER JOIN ab_ads_formats AS aaf ON aa.id = aaf.adID
AND aaf.formatID in(1,2)
INNER JOIN ab_formats AS ab ON aaf.formatID = ab.ID
GROUP BY aaf.adID HAVING TotalFormat >=2

SQL デモ: http://sqlfiddle.com/#!2/9f0ab/10

于 2012-12-15T06:24:59.433 に答える