Beste tweakers,
ik zit al weken met een probleem, waar ik geen goede "howto" voor kan vinden.
Ik beheer een vrienden netwerk site, die werkt met "levels":
- level 1: alleen vrienden kunnen je profiel zien.
- level 2: vrienden van vrienden + vrienden kunnen je profiel zien.
- level 3: vrienden van vrienden van vrienden + vrienden van vrienden + vrienden kunnen je profiel zien.
- level 4: iedereen kan je profiel zien.
de netwerk tabel ziet er zo uit:
als voorbeeld:
nu wil ik checken of iemand toegang mag krijgen tot een pagina, de gebruiker moet binnen het level 3 zitten, op het moment gebruik ik deze query (die 30 seconden lang duurt
):
(hier probeert user:2 te connecten naar de pagina van user:3)
daarna doe ik een mysql_num_rows, en als er >= 1 row is, geef ik toegang.
iemand enig idee hoe ik deze query, of desnoods mijn hele structuur kan verbeteren om mijn snelheid te verhogen?
Thomas
ik zit al weken met een probleem, waar ik geen goede "howto" voor kan vinden.
Ik beheer een vrienden netwerk site, die werkt met "levels":
- level 1: alleen vrienden kunnen je profiel zien.
- level 2: vrienden van vrienden + vrienden kunnen je profiel zien.
- level 3: vrienden van vrienden van vrienden + vrienden van vrienden + vrienden kunnen je profiel zien.
- level 4: iedereen kan je profiel zien.
de netwerk tabel ziet er zo uit:
code:
1
2
3
4
| network ( user int(10) NOT NULL default '0', friend int(10) NOT NULL default '0' ) |
als voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
| user | friend
---------------
1 | 3
3 | 5
7 | 8
3 | 7
1 (ik) -> 3 (level 1) -> 5 (level 2)
-> 7 (level 2) -> 8 (level 3) |
nu wil ik checken of iemand toegang mag krijgen tot een pagina, de gebruiker moet binnen het level 3 zitten, op het moment gebruik ik deze query (die 30 seconden lang duurt
(hier probeert user:2 te connecten naar de pagina van user:3)
code:
1
2
3
4
5
6
7
8
9
10
11
| SELECT 1
FROM network AS t1
INNER JOIN network AS t2
ON (t1.friend = t2.user)
INNER JOIN network AS t3
ON (t2.friend = t3.user)
WHERE t1.user = 2
AND (t1.friend = 3 OR
t2.friend = 3 OR
t3.friend = 3)
LIMIT 0,1 |
daarna doe ik een mysql_num_rows, en als er >= 1 row is, geef ik toegang.
iemand enig idee hoe ik deze query, of desnoods mijn hele structuur kan verbeteren om mijn snelheid te verhogen?
Thomas