2011-10-27 15 views
0

に参加複雑。これらのエンティティはそれぞれフィールドがprj_deletedtrk_deletedであり、削除されている(表示されていない)場合は0、削除されていない場合は0の値が表示されます(まだ表示されていません)。は、MySQLは、私は次のMySQLのクエリを持って

[マイプロジェクト]ビューページには、そのプロジェクトのトラックラインに基づいて各プロジェクトのアイコンが表示されます。これらのアイコンはtrk_statusの値とに基づいて表示されますtrk_state

だけでは、複数のtracklines(prj_id BYしたがってGROUP)を持っている場合でも、プロジェクト1時間を示すべきである私のプロジェクトビューページ

私の問題: BY GROUPにMySQLドキュメントから

「はまた、各グループからの値の選択は、アドインによって影響されることができませんg ORDER BY句。値が選択された後、結果セットのソートが発生し、ORDER BYは、サーバが選択したどの値には影響しません。」

理想的に削除されませんtracklinesのアイコンを表示しなければならない私のプロジェクトビューページ。この私は、GROUP BYがそうそのグループは削除されませんでしたtracklineで行われていた発生する前に、私はtrk_deleted、ORDER BY可能性が期待していた理由である。

うまくいけば、誰かが私はここで取得しようとしているかを理解することができます。

+0

自分を明確にしてくださいと 'trk_state'は、データの完全性の問題であり、データに異常が存在する可能性があります。 1つのプロジェクトにつき1つの 'trackline 'しかありません(そして残りは保存目的のために保持されます)。プロジェクトが2つのトラックラインを持ち、両方の 'trk_status'が有効であることは何を意味しますか? –

答えて

0

いくつかのサンプルデータを提供することができ、回答を希望する場合は、おそらくより良いクエリを手助けすることができます。平均時間:

SELECT Project.*, MAX(`trk_deleted`), MAX(`trk_status`), MAX(`trk_state`) 
FROM `project` AS `Project` 
LEFT JOIN `trackline` ON `prj_id` = `trk_project` AND trk_deleted = '0' 
WHERE `prj_deleted` = '0' 
GROUP BY `prj_id` ORDER BY `prj_name`; 
+0

2番目の条件で結合するtrk_deleted = '0'トリックを行いました。ありがとう! – Justin

0

私はあなたが正しい、あなたがtracklinesかどうか、および削除されませんtracklinesを持つ、削除されていないすべてのプロジェクトを取得したい場合です。しかし、trk_delete = 0を追加すると、トラックラインを持たないプロジェクトは除外されます。

私は、MySQLと非常に慣れていないんだけど、私はあなたがしたいと思いれるがNULL IS

SELECT 
    Project.*, 
    `trk_deleted`, 
    `trk_status`, 
    `trk_state` 
FROM 
    `project` AS `Project` 
LEFT JOIN 
    `trackline` ON `prj_id` = `trk_project` 
WHERE 
    `prj_deleted` = '0' 
    AND trk_deleted = '0' OR trk_deleted IS NULL 
GROUP BY 
    `prj_id` 
ORDER BY 
    `prj_name` 

それはそれではない場合は、プロジェクトが複数の電流 `trk_status`を持つことができる場合は、

関連する問題