Verschachtelte MySQL Abfrage

Verschachtelte MySQL Abfrage

am 09.07.2005 20:43:54 von nikolai.onken

Hallo,

ich habe eine relative verschachtelte Abfrage mit folgenden Tabellen:

`gf_permissions`,
`gf_user_has_gf_permissions`,
`gf_user_has_gf_usergroups`,
`gf_usergroups_has_gf_permissions`

Ich möchte wissen welche 'Rechte' ein Benutzer hat und das möglichst
in einer Abfrage lösen. Gegeben ist nur die Benutzer ID.
Meine jetzige Abfrage funktioniert nicht aber ist folgendermaßen:

SELECT gf_permissions.permission_binary
FROM
`gf_permissions`,
`gf_user_has_gf_permissions`,
`gf_user_has_gf_usergroups`,
`gf_usergroups_has_gf_permissions`
WHERE
(
gf_user_has_gf_permissions.gf_user_id =3D '1' &&
gf_user_has_gf_permissions.gf_permissions_id =3D gf_permissions.id
)
OR
(
gf_user_has_gf_usergroups.gf_user_id =3D '1' &&
gf_usergroups_has_gf_permissions.gf_usergroups_id =3D
gf_user_has_gf_usergroups.gf_usergroups_id &&
gf_usergroups_has_gf_permissions.gf_permissions_id =3D gf_permissions.id
)

Mit dieser Abfrage bekomme ich aber kein Ergebniss. Ist das überhaupt
in einer Abfrage möglich?
Viele Grüße,

Nikolai

Re: Verschachtelte MySQL Abfrage

am 10.07.2005 11:12:24 von Gregor Kofler

nikolai.onken@gmail.com wrote:

[Abfrage über mehrer Tabellen]

> Mit dieser Abfrage bekomme ich aber kein Ergebniss. Ist das überhaupt
> in einer Abfrage möglich?

Ja. Du möchtest (INNER) JOINs verwenden:
http://dev.mysql.com/doc/mysql/de/join.html


Gruß, Gregor


--
Landschafts- und Reisefotografie * http://www.gregorkofler.at
Licht-Blick - Forum für Multivisionsvorträge * http://licht-blick.at

Re: Verschachtelte MySQL Abfrage

am 10.07.2005 19:41:00 von nikolai.onken

Hallo,

wäre folgende Abfrage dann richtig um die Rechte eines Benutzers
abzufragen? Ein Benutzer kann direkt Rechte haben
(gf_user_has_gf_permissions), oder ein Benutzer kann Mitglied in einer
Benutzergruppe sein (gf_user_has_gf_usergroups), die wiederum Rechte
haben kann (gf_usergroups_has_gf_permissions). Alle Rechte sind in
gf_permissions gespeichert:

SELECT DISTINCT gf_permissions.permission_binary
FROM
`gf_permissions`
LEFT JOIN gf_user ON gf_user.id =3D '1'
LEFT JOIN gf_user_has_gf_permissions ON
gf_user_has_gf_permissions.gf_user_id =3D gf_user.id
LEFT JOIN gf_user_has_gf_usergroups ON
gf_user_has_gf_usergroups.gf_user_id =3D gf_user.id
LEFT JOIN gf_usergroups_has_gf_permissions ON
gf_usergroups_has_gf_permissions.gf_usergroups_id
=3Dgf_user_has_gf_usergroups.gf_user_id
WHERE
gf_user_has_gf_permissions.gf_permissions_id =3D gf_permissions.id ||
gf_usergroups_has_gf_permissions.gf_permissions_id =3D gf_permissions.id

Ist das 'sicher' und funktioniert diese Anfrage immer Korrekt, ohne
falsche Rechte zurückzugeben?
Viele Grüße,

Nikolai

Re: Verschachtelte MySQL Abfrage

am 11.07.2005 10:29:44 von Gregor Kofler

nikolai.onken@gmail.com wrote:

> Hallo,
>
> wäre folgende Abfrage dann richtig um die Rechte eines Benutzers
> abzufragen? Ein Benutzer kann direkt Rechte haben
> (gf_user_has_gf_permissions), oder ein Benutzer kann Mitglied in einer
> Benutzergruppe sein (gf_user_has_gf_usergroups), die wiederum Rechte
> haben kann (gf_usergroups_has_gf_permissions). Alle Rechte sind in
> gf_permissions gespeichert:
>
> SELECT DISTINCT gf_permissions.permission_binary
> FROM
> `gf_permissions`
> LEFT JOIN gf_user ON gf_user.id = '1'
> LEFT JOIN gf_user_has_gf_permissions ON
> gf_user_has_gf_permissions.gf_user_id = gf_user.id
> LEFT JOIN gf_user_has_gf_usergroups ON
> gf_user_has_gf_usergroups.gf_user_id = gf_user.id
> LEFT JOIN gf_usergroups_has_gf_permissions ON
> gf_usergroups_has_gf_permissions.gf_usergroups_id
> =gf_user_has_gf_usergroups.gf_user_id
> WHERE
> gf_user_has_gf_permissions.gf_permissions_id = gf_permissions.id ||
> gf_usergroups_has_gf_permissions.gf_permissions_id = gf_permissions.id

glglgl...

Nein, du brauchst *INNER* JOINS. In der WHERE-Klausel ist dann nur mehr
das Kriterium der Benutzer-ID nötig.
>
> Ist das 'sicher' und funktioniert diese Anfrage immer Korrekt, ohne
> falsche Rechte zurückzugeben?

Probier's aus - aber die obige Abfrage funktioniert sicher nicht.
Es wird nix helfen: Du musst dich einfach mal hinsetzen und mit den
Grundlagen von (my)SQL auseinandersetzen. Ressourcen gibt's dazu ja
genug im Internet.

Gruß, Gregor


--
Landschafts- und Reisefotografie * http://www.gregorkofler.at

Re: Verschachtelte MySQL Abfrage

am 11.07.2005 10:41:17 von Kai Ruhnau

Gregor Kofler schrieb:
> nikolai.onken@gmail.com wrote:
>
> [Abfrage über mehrer Tabellen]
>
>> Mit dieser Abfrage bekomme ich aber kein Ergebniss. Ist das überhaupt
>> in einer Abfrage möglich?
>
>
> Ja. Du möchtest (INNER) JOINs verwenden:
> http://dev.mysql.com/doc/mysql/de/join.html

Er hat INNER JOINs benutzt!

An den OP:
Hast du überhaupt Daten, auf die deine Kriterien zutreffen?
Versuch mal die WHERE-Bedingung wegzulassen, mach ein SELECT * und
schau, was du da bekommst. So direkt seh ich jetzt nicht, was daran
"nicht funktionieren" sollte.

Grüße
Kai

--
This signature is left as an exercise for the reader.

Re: Verschachtelte MySQL Abfrage

am 11.07.2005 12:13:29 von Gregor Kofler

Kai Ruhnau wrote:

>> Ja. Du möchtest (INNER) JOINs verwenden:
>> http://dev.mysql.com/doc/mysql/de/join.html
>
>
> Er hat INNER JOINs benutzt!

Asche auf mein Haupt - stimmt natürlich.

Gregor


--
Landschafts- und Reisefotografie * http://www.gregorkofler.at