[SQL] Moet even op weg geholpen worden.

Pagina: 1
Acties:

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Ik ben een photogallery aan het maken in PHP + MySQL.
Ik wil de albums kunnen markeren als public en private.

De private albums zijn alleen beschikbaar voor ingelogde gebruikers. En afhankelijk van de permissions die op een private album staan kan de ingelogde gebruiker het album wel of niet zien.

Daartoe heb ik een tabel users, albums en permissions.
De tabel permissions ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
+---------+----------+---------+
| perm_id | album_id | user_id |
+---------+----------+---------+
| 1  | 1      | 1    |
| 2  | 1      | 3    |
| 3  | 2      | 1    |
| 4  | 3      | 5    |
| 5  | 3      | 9    |
| enz..   | enz..    | enz..   |
+---------+----------+---------+

Ik kijk dus gewoon of de ingelogde gebruiker matched met het album_id en dan geef ik het album weer. Zoals hierboven dus te zien is mag album 1 bekeken worden door user 1 en 3.

De vraag:
Hoe bouw ik de query die de volgende recordset teruggeeft.
Alle albums met private <> 1 uitgezonderd de albums die wel private=1 hebben, maar in de permission tabel staan met als user_id het user_id van de huidige ingelogde gebruiker.

Ik heb het al een keer proberen op te schrijven, maar zie door de bomen het bos niet meer.

Verwijderd

Moeten we wel de opbouw van je andere tabellen weten :)
Anders kan ik er ook geen zinnige SQL query van bouwen.

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Sjorry ;)
code:
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
#
# Table structure for table `albums`
#

CREATE TABLE albums (
  album_id int(11) NOT NULL auto_increment,
  shortdesc varchar(100) NOT NULL default '',
  longdesc text NOT NULL,
  titleimage varchar(100) NOT NULL default '',
  private tinyint(1) unsigned NOT NULL default '0',
  UNIQUE KEY album_id (album_id)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `users`
#

CREATE TABLE users (
  user_id int(10) unsigned NOT NULL auto_increment,
  username varchar(100) NOT NULL default '',
  password varchar(100) NOT NULL default '',
  firstname varchar(100) NOT NULL default '',
  lastname varchar(100) NOT NULL default '',
  email varchar(100) NOT NULL default '',
  isAdmin tinyint(1) unsigned NOT NULL default '0',
  PRIMARY KEY  (user_id),
  UNIQUE KEY user_id (user_id),
  KEY user_id_2 (user_id)
) TYPE=MyISAM;

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

beetje booleaanse logica toch?

where (album niet prive) or (gebruiker heeft toegang tot dit album)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Wordt het dan een soort geneste query o.i.d.?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op donderdag 21 maart 2002 12:44 schreef kaandorp het volgende:
Wordt het dan een soort geneste query o.i.d.?
Dat hoeft helemaal niet denk ik :)

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Oke...
Here goes nothing :)
code:
1
2
3
4
5
6
7
8
9
10
SELECT  albums.album_id,
        albums.shortdesc,
        albums.longdesc,
        albums.titleimage,
        albums.private
FROM    albums,
        permissions
WHERE   albums.album_id > 0
AND     albums.private <> 1
OR      (albums.private = 1 AND (permissions.user_id = '2' AND albums.album_id = permissions.album_id))

Dit heb ik nu...

En het werkt!
Pagina: 1