Ik heb zelf nog nooit met joins gewerkt maar ben nu bezig met een systeem aan het schrijven en heb rekening gehouden met joins maar hoewel ik het principe snap en wat joins doen vraag ik me wel af hoe ik het beste dit kan schrijven.

mysql> select id, groupid, name from users;                                                                                                                                                                               
+----+---------+-------+                                                                                                                                                                                                                     
| id | groupid | name  |                                                                                                                                                                                                                     
+----+---------+-------+                                                                                                                                                                                                                     
|  1 |       1 | johan |                                                                                                                                                                                                                     
+----+---------+-------+                                                                                                                                                                                                                     
1 row in set (0,00 sec) 

mysql> select id, groupname from usergroup;
+----+---------------+
| id | groupname     |
+----+---------------+
|  2 | administrator |
|  3 | guest         |
|  4 | member        |
|  1 | root          |
+----+---------------+
4 rows in set (0,00 sec)


Nu heb ik het volgende voor mijn join query:
<?php
  if($cols != '*' && is_array($cols)){
    $cols = implode(',u.', $cols);
  }
  $sql = "SELECT $cols, g.groupname, g.othercol FROM users u INNER JOIN usergroup g ON u.groupid = g.id WHERE u.id = ? LIMIT 1";
?>


Kan dit beter, is het efficiënt en het meest belangrijke, doe ik het goed?
Want $cols kan ook '*' zijn dus eigenlijk word de query:

$sql = "SELECT *, g.groupname, g.othercol FROM users u INNER JOIN usergroup g ON u.groupid = g.id WHERE u.id = ? LIMIT 1";

Wat prima werkt volledig naar behoren maar misschien dat het beter kan omdat het een beetje raar staat.
Als $cols een array is heeft de eerste kolom geen u.-voorvoegsel?

Als een gebruiker niet gekoppeld is aan een groep komt deze ook in het geheel niet in je resultaten voor. Als dat de bedoeling is is dat natuurlijk niet erg.
Thomas van den Heuvel op 02/07/2015 19:21:04

Als $cols een array is heeft de eerste kolom geen u.-voorvoegsel?

Het is goed dat je het zegt, dat was gewoon een bug aangezien ik het nog niet uitgebreid had getest.

Thomas van den Heuvel op 02/07/2015 19:21:04

Als een gebruiker niet gekoppeld is aan een groep komt deze ook in het geheel niet in je resultaten voor. Als dat de bedoeling is is dat natuurlijk niet erg.


Elke gebruiker gaat een group id hebben, maar ik weet waar je naar toe hint en dat is geloof ik LEFT JOIN in mijn geval.

Reageren