[php][debug]Query probleem

Pagina: 1
Acties:

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
Mijn tabellen zien er (met veel troep ff eruit geknipt) als zo uit:

Rechten: rechten_UserID, rechten_ForumID, rechten_r, rechten_w, rechten_m

r=read, w=write, m=modify

dan nog groepen (categoriën), groep_id, groep_titel.

forums: forum_id, forum_groepid, forum_prive (als prive op 0 staat heeft iedereen toegang, staat ie op 1, heb je toegang nodig in het tabel rechten).

Stukje code

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$groepen_query = mysql_query ("
                                SELECT
                                    groep_id,
                                    groep_titel
                                FROM
                                    groepen
                                

    ") or die (mysql_error());
    
    while ( $groepen_fetch = mysql_fetch_object ( $groepen_query ) )
    {
        
        $forums_query = mysql_query ("
                                    SELECT
                                        forum_id,
                                        forum_groepid,
                                        forum_titel,
                                        forum_prive
                                    FROM
                                        forums
                                    
                                    LEFT JOIN 
                                        rechten 
                                    ON
                                        (
                                        forum_id = rechten.rechten_forumid
                                        )
                                    
                                    WHERE
                                        forum_groepid = '$groepen_fetch->groep_id'
                                    AND
                                        rechten.rechten_r = 1
                                    OR 
                                        forum_prive = 0

                                    ") or die (mysql_error());
                                    
        
        if ( mysql_num_rows ( $forums_query ) == "0" )
        {
            echo "";
        }
        else
        {
            echo "<b>Cat: </b>$groepen_fetch->groep_titel <br>";
        }

        while ( $forums_fetch = mysql_fetch_object ( $forums_query ) )
        {
            echo "<b>Forum: </b>$forums_fetch->forum_groepid - $forums_fetch->forum_titel <br>";
        }
    }


Oke, we hebben 4 forums (maar ff random gedaan);
General Chat,
Speeltuin,
in de cat General chat
User discussies,
Forum discussies
in de cat Crew

Alles heeft forum_prive op 1 behalve General Chat (dus de speeltuin ook).

Hij laat dit zien als ik ingelogt ben (heb stuk code weggehaald, zodat het niet onoverzichtelijk word, en heeft dus niets met het probleem te maken).

code:
1
2
3
4
5
6
7
Cat: General Chat 
Forum: 1 - General Chat 
Forum: 1 - De Speeltuin 
Cat: Crew 
Forum: 1 - General Chat 
Forum: 2 - Forum Discussies 
Forum: 2 - Gebruikers Discussies


die cijfers zijn de categorie id's

Nu zie je, dat de Speeltuin op forum_prive 1 staat, en die herhaalt ie niet 2 keer, dus ik denk dat het iets met de OR clause te maken heeft.

Voor de Or clause (bij de WHERE clausules), want alles wat prive = 1 staat, herhaalt hij niet, en alles wat op 0 staat wel.

Nu heb ik al een paar keer gecontroleerd of de namen goed zijn, maar ze zijn allemaal goed gespeld zonder typefouten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
code:
1
WHERE conditie AND ( conditie OR conditie)


Ik blaat hier eigenlijk maar wat, want ik snap niet wat je probleem eigenlijk is... Wat wil je precies bekomen? Je zegt wel waar de oorzaak van de fout volgens jou ligt, maar je zegt niet wat er fout gaat.

https://fgheysels.github.io/


  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
whoami schreef op 20 augustus 2002 @ 11:52:
code:
1
WHERE conditie AND ( conditie OR conditie)


Ik blaat hier eigenlijk maar wat, want ik snap niet wat je probleem eigenlijk is... Wat wil je precies bekomen? Je zegt wel waar de oorzaak van de fout volgens jou ligt, maar je zegt niet wat er fout gaat.
Ik zeg wel wat er fout gaat, lees dat stukje tussen [ code ] en [ / code ] maar eens. Deze oplossing werkt wel, dus ik denk dat ik het zo maar hou, mocht ik ooit nog n's langere query's impleteren dan zoek ik wel naar een andere oplossing.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
RedHat schreef op 20 augustus 2002 @ 11:57:
[...]


Ik zeg wel wat er fout gaat, lees dat stukje tussen [ code ] en [ / code ] maar eens. Deze oplossing werkt wel, dus ik denk dat ik het zo maar hou, mocht ik ooit nog n's langere query's impleteren dan zoek ik wel naar een andere oplossing.


Nee hoor.

Ik zie dit staan:
Nu zie je, dat de Speeltuin op forum_prive 1 staat, en die herhaalt ie niet 2 keer, dus ik denk dat het iets met de OR clause te maken heeft.

Voor de Or clause (bij de WHERE clausules), want alles wat prive = 1 staat, herhaalt hij niet, en alles wat op 0 staat wel.

Nu heb ik al een paar keer gecontroleerd of de namen goed zijn, maar ze zijn allemaal goed gespeld zonder typefouten
Maar hier kan ik niet uit opmaken wat je nu eigenlijk wilt. Je zegt wel wat je nu hebt.

https://fgheysels.github.io/


  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

code:
1
2
3
4
5
6
7
8
9
[...]
WHERE 
    (forum_groepid = '$groepen_fetch->groep_id'
     AND 
     rechten.rechten_r = 1)
OR  
    (forum_prive = 0 
     AND 
     forum_groepid = '$groepen_fetch->groep_id')


:? Dit werkt wel volgens mij....

(Je controleerde alleen op forum_prive, hierdoor zouden ALLE publieke fora in iedere loop worden weergegeven. Je moet ook controleren of dat forum wel in de groep zit waarmee je op dat moment bezig bent)

[ Voor 0% gewijzigd door Rashann op 20-08-2002 12:03 . Reden: Uitleg ]

If nothing is written below, I was the last to reply...


  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
de output is dat, en als je dat stukje eromheen leest, zie je duidelijk dat hij die dingen waar prive=0 van toepassing is, in elke categorie dropt. Dit is met deze query opgelost.

alleen zou dit ook mogelijk zijn (als je querys gaat vergroten)

code:
1
2
3
4
5
6
7
8
9
10
11
select * from iets

WHERE
    blaat
AND
   blaat
AND (
    blaat
OR
    blaat
)


lijkt me wel dan.

In ieder geval, bedankt.

Zoals Rayman al aangaf. ;) Dat is beter, thanks.

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 24-08 07:20

Rashann

Zoek de hond...

RedHat schreef op 20 augustus 2002 @ 12:03:
Zoals Rayman al aangaf. ;) Dat is beter, thanks.
Wie :? :+

If nothing is written below, I was the last to reply...


  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 01-09 18:16
Sorry voor de kick. :+
Nu zit ik dus met het probleem wat ik al verwachtte. Hij tjekt of de rechten er zijn, en aan de hand van dat gaat ie dus de while opbouwen.

Wat krijg je? 4 users recht geven tot prive forum = 4x forum op index. Ik heb al wat dingen geprobeerd, zoals met de haakjes spelen, query andersom zetten, maar allen negatief resultaat :(

Iemand ideeën?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        $forums_query = mysql_query ("
                                    SELECT
                                        forum_id,
                                        forum_groepid,
                                        forum_titel,
                                        forum_topics,
                                        forum_replys,
                                        forum_lastpost,
                                        forum_prive
                                    FROM
                                        forums
                                    
                                    LEFT JOIN 
                                        rechten 
                                    ON
                                        (
                                        forum_id = rechten.rechten_forumid
                                        )
                                    
                                    WHERE
                                        forum_groepid = '$groepen_fetch->groep_id'
                                    AND
                                        (
                                        rechten.rechten_r = 1
                                    AND
                                        forum_groepid = '$groepen_fetch->groep_id'
                                    OR  
                                        forum_prive = 0 
                                        )

                                    ") or die (mysql_error());


(hij vernaggelt een beetje m'n code met spaties enzo, en ook de ' )


Beetje omslachtig, maar DISTINCT werkt ;)
Pagina: 1