2 query's vergelijken - checkbox
Hallo,
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.
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.
Uhm, even kortgedacht zou ik dit denk ik oplossen met:
Hopelijk kun je hier wat mee.
Code (php)
Hopelijk kun je hier wat mee.
Gewijzigd op 12/02/2014 18:37:14 door D B
Kan ook in SQL:
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
Thx, dit werkt mooi.
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)?
Iemand enig idee? Zit nu al een paar dagen te klooien zeg maar, maar het is steed trial and error... En helaas heb ik niet zoveel verstand van PHP dat me dit nou een makkie is.
"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)?"
Bumpje, *vergeet al de bovenstaande posts* maar op welke manier kan ik bij die foreach bijvoorbeeld ook de groupid in de eerste TD erbij krijgen?:
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
Mysql functies zijn deprecated. Backticks? Sql Injection? Hm..
edit: foutje in array
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
Nu geeft hij niks weer? Kan ik dan nog wel de bestaande query's gebruiken?
@ Hierboven, maar hoe ga ik dat dan vervolgens in radio buttons verwerken met een Lid Ja - Lid Nee?
@ 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
Je moet wel de veldnamen en tabelnamen in de query aanpassen aan jouw situatie:
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
Hartstikke bedankt Ger! Vraagje, de query snap ik deels wel en deels niet, maar hoe zou die moeten als ik bijvoorbeeld een lijst van de gebruikers wil, dus als ik groep_id 2 bekijk welke gebruikers hier dan inzitten? Want ik snap nu niet welke ik dan precies moet omdraaien.
In ieder geval alwel hartstikke bedankt!
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...
Dan hoef je niet veel om te draaien, je voegt voor regel 18 weer een vooorwaarde toe
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
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




