0

以下にレイアウトしようとした3つのテーブルがあります。私は立ち往生しています。私は多くのクエリを行ったことがなく、以前に結合を行ったことがなく、これを行う方法に本当に混乱しています。クエリの例は、平易な英語で、

web_design="1" である skill_area からすべての portfolio_item_ids を取得し、次に、portfolio_item_ids の id 値を使用して、portfolio_items からすべての行を取得し、次に各行について、portfolio_item_id がportfolio_item_id と等しいタグから行を取得し、illustrator のいずれかの値を取得します。 photoshop または css は 1 です。

思いついたQUERY


SELECTポートフォリオ_アイテム_ID

FROM skill_area s

WHERE web_design=1


選択*

FROMポートフォリオ_アイテム p

WHERE p.id= s.portfolio_item_id


選択*

FROMタグ t

WHERE s.portfolio_item_id=t.portfolio_item_id


だから私はこれが正しいと思うし、今は一緒に参加する必要がある


ポートフォリオ項目

ID

項目名

説明

スキルエリア

ポートフォリオ_アイテム_id

ウェブデザイン

ブランディング

印刷する

タグ

ポートフォリオ_アイテム_id

イラストレーター

フォトショップ

CSS

4

4 に答える 4

2

「平易な英語」のステートメントにあるように、段階的に分解します。

  1. web_design skill_area の取得

    select * from skill_area where web_design = '1'
    
  2. ポートフォリオアイテムと結合

    select * 
     from skill_area s, portfolio_items p 
     where web_design = '1' 
       and p.id = s.portfolio_item_id
    
  3. タグで結合し、value=1 の行を選択して、タグ テーブルから列のみを返す)

    select t.* 
     from skill_area s, portfolio_items p, tags t 
     where web_design = '1' 
       and p.id = s.portfolio_item_id
       and p.id = t.portfolio_item_id
       and t.value = '1'
    
于 2012-05-03T16:24:00.600 に答える
1

これを試して:

SELECT sa.portfolio_item_id, pi.*, subtags.*
FROM skill_area sa
INNER JOIN portfolio_items pi ON sa.portfolio_item_id = pi.id
INNER JOIN (SELECT CASE WHEN illustrator = '1' THEN 'illustrator' 
                        WHEN photoshop = '1' THEN 'photoshop' 
                        ELSE 'css' END as tag, portfolio_item_id 
            FROM tags) subtags ON sa.portfolio_item_id = subtags.portfolio_item_id
WHERE sa.web_design = '1'

タグからすべての列を取得するだけの代替手段が必要だとコメントしました。

SELECT sa.portfolio_item_id, pi.*, tags.*
FROM skill_area sa
INNER JOIN portfolio_items pi ON sa.portfolio_item_id = pi.id
INNER JOIN tags ON sa.portfolio_item_id = tags.portfolio_item_id
WHERE sa.web_design = '1'
于 2012-05-03T16:15:04.290 に答える
0
SELECT      P.*
FROM        SkillArea S
INNER JOIN  Portfolio P ON S.portfolio_item_id = P.id
INNER JOIN  Tags T ON T.portfolio_item_id = P.id
WHERE       S.web_design = 1
AND         P.id = 1
于 2012-05-03T16:15:07.690 に答える
0

このようなクエリは次のようになります。私はあなたの理解を助けるためにあなたの英語のバリエーションから逐語的に翻訳しようとし、ステップを説明するための注釈を含めました.

select s.portfolio_item_id, p.*, t.*
from Skill_Area s                                 -- get all portfolio_item_ids from skill_area
inner join Portfolio_Items p on                   -- then get all the rows from portfolio_items
    p.portfolio_item_ids = s.portfolio_item_ids   -- with the id values of portfolio_item_ids
inner join Tags t on                              -- then for each row, get the row from tags
    t.portfolio_item_id = p.portfolio_item_id     -- where portfolio_item_id is equal to portfolio_item_id
    and t.portfolio_item_id = 1                   -- and the value of it is 1
where s.web_design = "1"                          -- where web_design = "1"
于 2012-05-03T16:22:56.217 に答える