2 query's vergelijken - checkbox
Ik heb twee query's:
Query 1: haalt de gehele lijst met groepen op
Query 2: haalt de lijst op van groepen waar een gebruiker lid van is
Beide haal ik door een while en heb ik dus 2 lijstjes:
Lijstje 1: Groep_1, Groep_2, Groep_3, Groep_4 en Groep_5
Lijstje 2: Groep_1 en Groep_5
Nu wil ik dus in PHP een overzicht creëren wat er dus zo uit komt te zien:
Overzicht - Gebruiker_1 - Lid van groepen:
[x] Groep_1
[ ] Groep_2
[ ] Groep_3
[ ] Groep_4
[x] Groep_5
Hoe kan ik dit simpel doen? Ik kan er echt even niet op komen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT g.gebruikers_naam,
gr.groeps_naam,
IF(gg.gebruikers_id IS NULL,0,1) AS lidmaatschap
FROM
(SELECT ge.gebruikers_id,
go.groeps_id
FROM gebruikers AS ge
CROSS JOIN groepen AS go
) ggr
JOIN
gebruikers g ON ggr.gebruikers_id = g.gebruikers_id
JOIN
groepen gr ON ggr.groeps_id = gr.groeps_id
LEFT JOIN gebruikers_groepen gg
ON ggr.gebruikers_id = gg.gebruikers_id
AND ggr.groeps_id = gg.groeps_id
ORDER BY g.gebruikers_id, gr.groeps_id
gr.groeps_naam,
IF(gg.gebruikers_id IS NULL,0,1) AS lidmaatschap
FROM
(SELECT ge.gebruikers_id,
go.groeps_id
FROM gebruikers AS ge
CROSS JOIN groepen AS go
) ggr
JOIN
gebruikers g ON ggr.gebruikers_id = g.gebruikers_id
JOIN
groepen gr ON ggr.groeps_id = gr.groeps_id
LEFT JOIN gebruikers_groepen gg
ON ggr.gebruikers_id = gg.gebruikers_id
AND ggr.groeps_id = gg.groeps_id
ORDER BY g.gebruikers_id, gr.groeps_id
Gewijzigd op 12/02/2014 18:39:45 door Ger van Steenderen
D B op 12/02/2014 17:24:51:
Uhm, even kortgedacht zou ik dit denk ik oplossen met:
Hopelijk kun je hier wat mee.
Code (php)
Hopelijk kun je hier wat mee.
Bedankt voor jullie snelle reacties.
Alleen zijn bij mij lijstje1 en lijstje2 query's. Hoe ga ik dit dan toepassen met die foreach?
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
$sql="SELECT groep FROM tabel";
$res=mysql_query($sql);
$lijstje1=array();
while ($row = mysql_fetch_array($res)){
$lijstje1[]=$row['groep'];
}
$sql="SELECT groep2 FROM tabel";
$res=mysql_query($sql);
$lijstje2=array();
while ($row = mysql_fetch_array($res)){
$lijstje2[]=$row['groep2'];
}
foreach ( $lijstje1 as $key) {
if ( in_array($key, $lijstje2) ) {
echo "[X] - ". $key. "<br>";
}
else {
echo "[ ] - ". $key. "<br>";
}
}
?>
$sql="SELECT groep FROM tabel";
$res=mysql_query($sql);
$lijstje1=array();
while ($row = mysql_fetch_array($res)){
$lijstje1[]=$row['groep'];
}
$sql="SELECT groep2 FROM tabel";
$res=mysql_query($sql);
$lijstje2=array();
while ($row = mysql_fetch_array($res)){
$lijstje2[]=$row['groep2'];
}
foreach ( $lijstje1 as $key) {
if ( in_array($key, $lijstje2) ) {
echo "[X] - ". $key. "<br>";
}
else {
echo "[ ] - ". $key. "<br>";
}
}
?>
Kun je hier wat mee?
Gewijzigd op 13/02/2014 21:10:30 door D B
Maar wat als ik in lijstje 1 nou een groepnaam en een groepid wil? Hoe krijg ik dit dan in die foreach?
Toevoeging op 18/02/2014 09:49:35:
Iemand een idee hoe ik bij lijstje1 een extra veld kan meegeven in de foreach? Dus bijvoorbeeld het groepid (&groepnaam)?
"Maar wat als ik in lijstje 1 nou een groepnaam en een groepid wil? Hoe krijg ik dit dan in die foreach?
Toevoeging op 18/02/2014 09:49:35:
Iemand een idee hoe ik bij lijstje1 een extra veld kan meegeven in de foreach? Dus bijvoorbeeld het groepid (&groepnaam)?"
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
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
<?php
$query = mysql_query('SELECT `group`.`groupid`, `group`.`groupname`
FROM `group`');
$getGroups = array();
while($row = mysql_fetch_array($query))
{
$getGroups[] = $row['groupname'];
}
$query = mysql_query('SELECT `group`.`groupid`, `group`.`groupname`
FROM `group`
INNER JOIN usergroup ON usergroup.groupid = group.groupid
WHERE usergroup.userid = "'.$_GET['user_view'].'"');
$getUserGroups = array();
while($row = mysql_fetch_array($query))
{
$getUserGroups[] = $row['g.groupname'];
}
foreach($getGroups as $key)
{
$i++;
echo '<tr>';
echo '<td>'.$key.'</td>';
echo '<td><input type="radio" name="group-'.$i.'" value="1-'.$key.'" '.(in_array($key, $getUserGroups) ? 'checked' : '').' /></td>';
echo '<td><input type="radio" name="group-'.$i.'" value="0-'.$key.'" '.(!in_array($key, $getUserGroups) ? 'checked' : '').' /></td>';
echo '</tr>';
}
?>
$query = mysql_query('SELECT `group`.`groupid`, `group`.`groupname`
FROM `group`');
$getGroups = array();
while($row = mysql_fetch_array($query))
{
$getGroups[] = $row['groupname'];
}
$query = mysql_query('SELECT `group`.`groupid`, `group`.`groupname`
FROM `group`
INNER JOIN usergroup ON usergroup.groupid = group.groupid
WHERE usergroup.userid = "'.$_GET['user_view'].'"');
$getUserGroups = array();
while($row = mysql_fetch_array($query))
{
$getUserGroups[] = $row['g.groupname'];
}
foreach($getGroups as $key)
{
$i++;
echo '<tr>';
echo '<td>'.$key.'</td>';
echo '<td><input type="radio" name="group-'.$i.'" value="1-'.$key.'" '.(in_array($key, $getUserGroups) ? 'checked' : '').' /></td>';
echo '<td><input type="radio" name="group-'.$i.'" value="0-'.$key.'" '.(!in_array($key, $getUserGroups) ? 'checked' : '').' /></td>';
echo '</tr>';
}
?>
Gewijzigd op 05/03/2014 10:40:41 door Gerben Kwakkel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
while($row = mysql_fetch_array($query))
{
$getUserGroups[] = Array('name'=>$row['g.groupname'],'id'=>$row['groupid']);// Waar komt g vandaan? moet dit group zijn?
}
foreach($getGroups as $group)
{
$i++;
echo '<tr>';
echo '<td>'.$group['name'].' '.$group['id'].'</td>';
echo '<td><input type="radio" name="group-'.$i.'" value="1-'.$group['name'].'" '.(in_array($group['name'], $getUserGroups) ? 'checked' : '').' /></td>';
echo '<td><input type="radio" name="group-'.$i.'" value="0-'.$group['name'].'" '.(!in_array($group['name'], $getUserGroups) ? 'checked' : '').' /></td>';
echo '</tr>';
}
?>
while($row = mysql_fetch_array($query))
{
$getUserGroups[] = Array('name'=>$row['g.groupname'],'id'=>$row['groupid']);// Waar komt g vandaan? moet dit group zijn?
}
foreach($getGroups as $group)
{
$i++;
echo '<tr>';
echo '<td>'.$group['name'].' '.$group['id'].'</td>';
echo '<td><input type="radio" name="group-'.$i.'" value="1-'.$group['name'].'" '.(in_array($group['name'], $getUserGroups) ? 'checked' : '').' /></td>';
echo '<td><input type="radio" name="group-'.$i.'" value="0-'.$group['name'].'" '.(!in_array($group['name'], $getUserGroups) ? 'checked' : '').' /></td>';
echo '</tr>';
}
?>
edit: foutje in array
Gewijzigd op 05/03/2014 10:54:47 door Michael -
Ger van Steenderen op 12/02/2014 18:37:33:
Kan ook in SQL:
....
....
Oké de query is wellicht wat moeilijker te begrijpen, maar uiteindelijk wordt het veel simpeler als je in php met array's gaat lopen klooien.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT g.gebruikers_naam,
gr.groeps_naam,
IF(gg.gebruikers_id IS NULL,0,1) AS lidmaatschap
FROM
(SELECT ge.gebruikers_id,
go.groeps_id
FROM gebruikers AS ge
CROSS JOIN groepen AS go
WHERE ge.gebruikers_id = 666
) ggr
JOIN
gebruikers g ON ggr.gebruikers_id = g.gebruikers_id
JOIN
groepen gr ON ggr.groeps_id = gr.groeps_id
LEFT JOIN gebruikers_groepen gg
ON ggr.gebruikers_id = gg.gebruikers_id
AND ggr.groeps_id = gg.groeps_id
ORDER BY g.gebruikers_id, gr.groeps_id
gr.groeps_naam,
IF(gg.gebruikers_id IS NULL,0,1) AS lidmaatschap
FROM
(SELECT ge.gebruikers_id,
go.groeps_id
FROM gebruikers AS ge
CROSS JOIN groepen AS go
WHERE ge.gebruikers_id = 666
) ggr
JOIN
gebruikers g ON ggr.gebruikers_id = g.gebruikers_id
JOIN
groepen gr ON ggr.groeps_id = gr.groeps_id
LEFT JOIN gebruikers_groepen gg
ON ggr.gebruikers_id = gg.gebruikers_id
AND ggr.groeps_id = gg.groeps_id
ORDER BY g.gebruikers_id, gr.groeps_id
@ Hierboven, maar hoe ga ik dat dan vervolgens in radio buttons verwerken met een Lid Ja - Lid Nee?
Gewijzigd op 05/03/2014 11:39:44 door Gerben Kwakkel
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
while ($row = mysql_fetch_assoc($query) {
echo '<tr><td>' . $row['group_name'] . '</td><td>
<input type="checkbox" name="group[]" value="' . $row['group_id]' . '"';
echo ($row['lidmaatschap'] == 1) ? ' checked' : '';
echo '></td></tr>';
}
?>
while ($row = mysql_fetch_assoc($query) {
echo '<tr><td>' . $row['group_name'] . '</td><td>
<input type="checkbox" name="group[]" value="' . $row['group_id]' . '"';
echo ($row['lidmaatschap'] == 1) ? ' checked' : '';
echo '></td></tr>';
}
?>
Gewijzigd op 05/03/2014 11:47:23 door Ger van Steenderen
In ieder geval alwel hartstikke bedankt!
http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html
"group" is een gereserveerd woord in (my)sql.
"group" vervolgens voor een tabelnaam gebruiken, is vragen om problemen...
"group" is een gereserveerd woord in (my)sql.
"group" vervolgens voor een tabelnaam gebruiken, is vragen om problemen...
Alleen moet je dan in PHP wel per gebruiker gaan groeperen.
Let wel even op wat Ivo zegt, omdat je nu backticks gebruikt heb je geen probleen, maar stel dat een database beheerder overstapt op een professioneel database management systeem, kan je al je query's aan gaan passen
Gewijzigd op 05/03/2014 17:15:19 door Ger van Steenderen