2016-12-15 18 views
1

私はPHP認証チュートリアルに従っています。WHERE句との関係で2つのテーブルからデータを取得する

ここで、ナビゲーションバーに機能を追加します。私は説明しようとし、うまくいけば誰かが答えを持っています。

私は2つのユーザーテーブル、ユーザーとuser_permissionsがあります。
ユーザテーブルには、district_id,district,gemeente_idおよびgemeenteという追加のカラムがあります。私はまた、districtengemeentenと呼ばれる2つの余分なテーブルをデータベースに持っています。

districtenテーブルには2つの列があります。 idおよびdistrictは、ユニークなIDnameを保持しています。 gemeenteテーブルは、少なくともこれら3つのカラムがid,district_idおよびgemeenteである。

クエリ内のユーザーログが、それはどこgemeentenテーブルからすべての値(列gemeente)が表示されますナビゲーションバーで<ul>で結果を与える時:ここで

は私が起こるしたいものですユーザーはに割り当てられました。

例:市1、市2市3及び市4

ユーザーがログインすると、彼がすべき:

ユーザZZZが地区のA.
に割り当てられている。この地区は4 gemeentenを保持しています 地区Aの都市のみを参照してください。

Slim2 Frameworkでこれをどのように機能させ、PHP認証コードに統合するのか分かりません。だから、どんな助けでも大歓迎です。

答えて

0

まず、テーブルを正規化して、冗長な情報を取り除く必要があります。リレーショナルデータベースではそれを維持することが難しいからです(MySQLのようなリレーショナルデータベースを使用していると仮定します)。

基本的に各ユーザーはgemeenteに割り当てられ、各地区に割り当てられた各gemeenteには、自分の順番に地区と地区が割り当てられています(gemeenten)。ユーザーテーブルにはgemeente_idが必要です。 districtengemeenteのスキーマは問題なく表示されます。

必要なデータを取得するには2つの方法があります.1つのクエリで2つのクエリ(1つはユーザーの地区をフェッチ、2つ目は地区をフェッチ)選択する方法はあなた次第です。

第一のアプローチ:

SELECT d.id FROM district AS d LEFT JOIN gemeente AS g ON g.district_id=d.id LEFT JOIN user AS u ON u.gemeente_id=g.id WHERE u.id=<user_id>

SELECT g.id, g.gemeenten from gemeente as g where g.district_id = <res_of_prev_query>

第二のアプローチ:

SELECT g.id, g.gemeenten FROM gemeente AS g LEFT JOIN districten AS d ON g.district_id=d.id INNER JOIN ( SELECT DISTINCT district_id, u.id AS user_id FROM gemeente as gg INNER JOIN user AS u ON u.gemeente_id=gg.id) AS ud ON ud.district_id=g.district_id WHERE ud.user_id=<user_id>

あなたは、あなたのORM/ActiveRecordのには、このクエリを変換、それを実行し、ulを表示する必要がありますリスト

UPD:私は私の答えを更新しました。 @DarkBeeが私のミスを指摘してくれました

+1

私はユーザテーブルに 'gemeente_id'しか必要ではなく、正しい' district_id'を取り出せるといいでしょう。そうでなければあなたのユーザがどこに住んでいるのか分かりません。 – DarkBee

+0

@DarkBeeええ、そうです。私の答えを更新させてください。おかげで –

+0

@YuriyNedostup:おかげで今のところ。今私はEloquentとTwigでSlim2を使用しています。私はSlim2のこのORMにどのように変換するのか分からないので、このフレームワークにはとても新しいものです。 – Brnovich

関連する問題