0

テーブルからすべての行を選択しようとしています。また、親がある場合は同じ行に親に関する情報を含めようとしています。そうでない場合、親データは空白にする必要があります。

SELECT
p.id,
p.name,
'0' AS page_exists      
FROM 
pages p
    LEFT JOIN pages pp ON (pp.page_id=p.parent) 
WHERE 
p.page_type=3 
ORDER BY 
name ASC

親の一致が成功したときに、「parent_id」と「parent_name」の 2 つの列を各行に追加したいと思います。

親を持つページの最終結果は次のようになります。

id=2
name="test"
page_exists=0   
parent_id=1
parent_name="abc"

ページに親がない場合、次のようになります。

id=3
name="other page"
page_exists=0   
parent_id=0
parent_name=""
4

1 に答える 1

0

親情報にエイリアス pp を使用してテーブル自体に対してa を実行するLEFT JOINと、親行のフィールドはpp.page_idおよびとして使用できます。pp.nameどちらもNULL親が存在しない場合です。

したがって、次のクエリには親のフィールドが含まれます。

SELECT p.id, p.name, '0' AS page_exists,
       pp.page_id AS parent_id, pp,name AS parent_name      
FROM pages p
LEFT JOIN pages pp 
ON (pp.page_id=p.parent) 
WHERE p.page_type=3 
ORDER BY name ASC

NULL親が存在しない場合に sの代わりに 0 と '' を取得するには、句CASEでステートメントを使用できます。SELECT

SELECT pp.id, pp.name, '0' AS page_exists,
      CASE WHEN pp.page_id THEN pp.page_ID ELSE 0 END AS parent_id,
      CASE WHEN pp.name THEN pp.name ELSE '' AS parent_name
于 2013-03-21T08:16:53.113 に答える