0

「shares」と「pending_share_changes」の2つのテーブルがあります。「共有」テーブルには、次の列があります。

share_ID, asset_ID, member_ID, percent_owner, is_approved

until_share_changesには次の列があります。

share_change_ID, asset_ID, member_ID, percent_owner, is_approved, requested_by

メンバーが承認または拒否しなければならない保留中の変更をリストするフォーム(php)があります。メンバーに既存の共有がない場合、つまり、メンバーの「共有」テーブルにレコードがない場合を除いて、すべてが正常に機能します。保留中の共有の変更を表示するために使用しているクエリは次のとおりです。

SELECT p.share_change_ID, assets.asset_desc, assets.asset_value, shares.percent_owner AS 
          percent_owner_old, p.percent_owner 
          FROM pending_share_changes as p
          inner join assets on assets.asset_ID = p.asset_ID
          inner join shares on shares.asset_ID = p.asset_ID AND shares.member_ID = p.member_ID
          INNER JOIN orgs ON orgs.org_ID = assets.org_ID
          WHERE orgs.org_ID = '$org_ID' AND p.member_ID = '$member_ID' AND p.is_approved = '0'

IFNULL(shares.percent_owner、0)ASpercent_owner_oldを使用してみましたが、機能しませんでした。クエリは結果を返しません。共有テーブルにレコードがない場合、percent_owner_old列に「0」を表示させたいのですが。

ありがとう。

4

1 に答える 1

1

結合をsharesからに変更してみINNER JOINてくださいLEFT JOIN

SELECT ....
FROM pending_share_changes p
....
LEFT JOIN shares ON shares.asset_ID = p.asset_ID AND shares.member_ID = p.member_ID

これは、「すべてのmember_IDおよびasset_IDp、それをの一致する行に結合することを意味しsharesます。/が存在するが存在しない場合はmember_IDasset_IDとにかくpsharesを作成し、対応する値をNULL「」に設定します。

INNER JOIN関連するレコードが両方のテーブルに存在する結合された行のみを表示する手段。

次に、と組み合わせることができますIFNULL(shares.percent_owner,0) AS percent_owner_old

于 2012-01-22T04:27:47.797 に答える