Calvin
Legacy Member
MYSQL:
Probleem met het vinden van een bepaalde recordset... (Had beter moeten opletten tijdens de les lang geleden)
Ik heb volgende info in 3 tabellen:
1) tabel met usernames en id (+bijhorende info)
mysql> select id, nic_name from users;
+----+--------------+
| id | nic_name |
+----+--------------+
| 1 | lieven |
| 2 | lazy charles |
| 3 | guest |
| 8 | lievendp |
| 9 | stijn |
| 10 | maarten |
| 11 | maria |
+----+--------------+
7 rows in set (0.02 sec)
2) tabel met categoriën
mysql> select id, name from categories;
+----+---------+
| id | name |
+----+---------+
| 1 | duiken |
| 2 | deviant |
| 16 | dr fun |
| 18 | tattoo |
| 19 | test |
+----+---------+
5 rows in set (0.01 sec)
3) deze derde tabel zorgt voor een x-to-x relatie tssn de categoriën en de users. Het wil bedoelen dat bepaalde users toegang hebben op bepaalde categoriën.
mysql> select user_id, category_id from protections;
+---------+-------------+
| user_id | category_id |
+---------+-------------+
| 8 | 1 |
| 11 | 1 |
| 8 | 19 |
+---------+-------------+
3 rows in set (0.01 sec)
Ten eerste zocht ik de namen en userids van de users die toegang hebben tot een bepaalde categorie bv: 1 Dit was mogelijk met volgende query:
mysql> select u.id, u.name, c.id, c.name from users u, categories c, protections p where c.id = 1 and u.id = p.user_id and c.id = p.category_id;
+----+----------------+----+--------+
| id | name | id | name |
+----+----------------+----+--------+
| 8 | Lieven DP test | 1 | duiken |
| 11 | Maria | 1 | duiken |
+----+----------------+----+--------+
2 rows in set (0.02 sec)
Maar dan nu zoek ik een query waarmee ik dus de namen en id's van alle users kan vinden die geen toegang hebben tot een bepaalde categorie bv:1
maw: de namen (ids) van alle records in de users tabel - de namen (ids) van de protections tabel die als protections.category_id de waarde één (1) hebben... Helaas heb ik niet genoeg opgelet tijdens de lessen sql...
Dus had ik hetvolgende ineengeknutseld:
mysql> select u.id, u.name from users u, categories c, protections p where c.id = 1 and u.id != p.user_id and p.category_id = c.id;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | lieven |
| 2 | Karel De Puysseleir |
| 3 | guest |
| 9 | Stijn |
| 10 | Maarten |
| 11 | Maria |
| 1 | lieven |
| 2 | Karel De Puysseleir |
| 3 | guest |
| 8 | Lieven DP test |
| 9 | Stijn |
| 10 | Maarten |
+----+---------------------+
12 rows in set (0.00 sec)
=> In de eerste reeks (1tem11) mankeert enkel de user "Lieven DP test" en in de tweede reeks (1tem10) mankeert enkel de user "Maria"
=> Eigenlijk wil ik slechts één reeks waarin beide namen mankeren:
1 lieven
2 Karel De Puysseleir
3 guest
9 Stijn
10 Maarten
Kan iemand me zeggen waar de fout zit? één of andere AND clausule die mankeert? Ik herinnerde me vaag iets van "select ... " minus "select ... " maar minus geeft een error in mysql.
bedankt,
Lieven
Probleem met het vinden van een bepaalde recordset... (Had beter moeten opletten tijdens de les lang geleden)
Ik heb volgende info in 3 tabellen:
1) tabel met usernames en id (+bijhorende info)
mysql> select id, nic_name from users;
+----+--------------+
| id | nic_name |
+----+--------------+
| 1 | lieven |
| 2 | lazy charles |
| 3 | guest |
| 8 | lievendp |
| 9 | stijn |
| 10 | maarten |
| 11 | maria |
+----+--------------+
7 rows in set (0.02 sec)
2) tabel met categoriën
mysql> select id, name from categories;
+----+---------+
| id | name |
+----+---------+
| 1 | duiken |
| 2 | deviant |
| 16 | dr fun |
| 18 | tattoo |
| 19 | test |
+----+---------+
5 rows in set (0.01 sec)
3) deze derde tabel zorgt voor een x-to-x relatie tssn de categoriën en de users. Het wil bedoelen dat bepaalde users toegang hebben op bepaalde categoriën.
mysql> select user_id, category_id from protections;
+---------+-------------+
| user_id | category_id |
+---------+-------------+
| 8 | 1 |
| 11 | 1 |
| 8 | 19 |
+---------+-------------+
3 rows in set (0.01 sec)
Ten eerste zocht ik de namen en userids van de users die toegang hebben tot een bepaalde categorie bv: 1 Dit was mogelijk met volgende query:
mysql> select u.id, u.name, c.id, c.name from users u, categories c, protections p where c.id = 1 and u.id = p.user_id and c.id = p.category_id;
+----+----------------+----+--------+
| id | name | id | name |
+----+----------------+----+--------+
| 8 | Lieven DP test | 1 | duiken |
| 11 | Maria | 1 | duiken |
+----+----------------+----+--------+
2 rows in set (0.02 sec)
Maar dan nu zoek ik een query waarmee ik dus de namen en id's van alle users kan vinden die geen toegang hebben tot een bepaalde categorie bv:1
maw: de namen (ids) van alle records in de users tabel - de namen (ids) van de protections tabel die als protections.category_id de waarde één (1) hebben... Helaas heb ik niet genoeg opgelet tijdens de lessen sql...
Dus had ik hetvolgende ineengeknutseld:
mysql> select u.id, u.name from users u, categories c, protections p where c.id = 1 and u.id != p.user_id and p.category_id = c.id;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | lieven |
| 2 | Karel De Puysseleir |
| 3 | guest |
| 9 | Stijn |
| 10 | Maarten |
| 11 | Maria |
| 1 | lieven |
| 2 | Karel De Puysseleir |
| 3 | guest |
| 8 | Lieven DP test |
| 9 | Stijn |
| 10 | Maarten |
+----+---------------------+
12 rows in set (0.00 sec)
=> In de eerste reeks (1tem11) mankeert enkel de user "Lieven DP test" en in de tweede reeks (1tem10) mankeert enkel de user "Maria"
=> Eigenlijk wil ik slechts één reeks waarin beide namen mankeren:
1 lieven
2 Karel De Puysseleir
3 guest
9 Stijn
10 Maarten
Kan iemand me zeggen waar de fout zit? één of andere AND clausule die mankeert? Ik herinnerde me vaag iets van "select ... " minus "select ... " maar minus geeft een error in mysql.
bedankt,
Lieven
