Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] 2 query's in_array

Pagina: 1
Acties:

  • GAITii
  • Registratie: December 2008
  • Laatst online: 23:03
Beste mede-Tweakers,

hier ben ik weer met een klein stukje PHP waar ik niet verder mee kom.

De bedoeling is om een lijstje te maken met groepen waarin een gebruiker lid is, een klein voorbeeldje:

Groep_1[X]
Groep_2[ ]
Groep_3[ ]


Daarvoor gebruik ik bijvoorbeeld dit stukje code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$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 "[&nbsp;&nbsp;&nbsp;] - ". $key. "<br>";
    }
}


Nu is alleen mijn vraag hoe krijg ik i.p.v. alleen de groepnaam ook de groepid erbij in lijstje1 en dan niet door alleen in het SELECT-veld groepid erbij maar hoe in de foreach?

Dus bijvoorbeeld zo:

Groep_1 (#455)[X]
Groep_2 (#456)[ ]

Steam: GAITii | PSN: GAITii | 3DS FC: 0361-7487-5231


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Je zoekt naar unions.

Maareh, getallen in veldnamen zijn meestal een hele mooie indicatie van het feit dat je tabel niet goed genormaliseerd is. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • GAITii
  • Registratie: December 2008
  • Laatst online: 23:03
Dit is dan ook een ruwe namaak tabel van mijn echte tabel, om het gehele verhaal wat te versimpelen :)

Steam: GAITii | PSN: GAITii | 3DS FC: 0361-7487-5231


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Dan nog zijn unions die voor dit doel gebruikt worden om data uit verschillende kolommen in dezelfde tabel op een uniforme manier weer te geven alsnog een teken aan de wand omdat je dan meestal in de eerste instantie je data in de vorm had kunnen gieten zoals die uit je union komt, wat neerkomt op dezelfde gemiste normalisatieslag. ;)

[ Voor 8% gewijzigd door NMe op 18-02-2014 15:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • GAITii
  • Registratie: December 2008
  • Laatst online: 23:03
Maar kan er ook gezegd worden hoe ik dit eventueel wel kan oplossen?

Mijn database ziet er als volgt uit:

Tabel user:
- userid
- username
- fullname
- password
- salt

Tabel group:
- groupid
- groupname

Tabel usergroup:
- userid
- groupid

Steam: GAITii | PSN: GAITii | 3DS FC: 0361-7487-5231


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Dat is een heel ander formaat dan je in je queries laat zien, daar doe je het dus wel goed. Je kunt gewoon met een join de groepen voor een gebruiker selecteren:

SELECT g.groupid, g.groupname FROM group g INNER JOIN usergroup ug ON ug.groupid = g.groupid WHERE ug.userid = <id van user>

Het is trouwens gangbaar om de naam van de tabel niet in de kolomnamen te gebruiken. Dat de kolom 'id' in tabel 'group' het id van de groep is, is nogal logisch. Je bent er ook in je user tabel absoluut niet consequent in.

https://niels.nu


  • GAITii
  • Registratie: December 2008
  • Laatst online: 23:03
Die join had ik dus ook, maar het gaat me er om hoe ik PHP-technisch het ga doen :)

Zo moet het uiteindelijk helemaal worden met radio buttons om Ja of Nee te selecteren, of deze gebruiker wel of niet toegang tot de groep mag hebben.

GroepnaamJaNee
Groep_1XO
Groep_2XO
Groep_3OX


En deze code heb ik nu:

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
        $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['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>';       
        }

[ Voor 90% gewijzigd door GAITii op 19-02-2014 09:48 ]

Steam: GAITii | PSN: GAITii | 3DS FC: 0361-7487-5231


  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 08:17
@Hydra

Het moet een LEFT JOIN worden lijkt me, aangezien hij voor 1 gebruiker weer wil geven welke groepen hij heeft, en ook wil weergeven welke niet.


@Gerben
Als je de Query van Hydra (maar dan met Left Join) gebruikt, dan haalt de query e.e.a. al op. Hij moet dan nog lichtelijk aangepast worden:

SQL:
1
2
3
4
5
SELECT 
    CONCAT(g.groupname, '(#', g.groupid, ')') AS groep, 
    IF(ug.group_id IS NULL, '[]', '[X]') AS actief
FROM group g 
INNER JOIN usergroup ug ON ug.groupid = g.groupid WHERE ug.userid = <id van user>

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
GerbenKwakkel schreef op woensdag 19 februari 2014 @ 09:24:
Die join had ik dus ook, maar het gaat me er om hoe ik PHP-technisch het ga doen :)
Ik mis een beetje eigen inzet. Je hebt een simpel queryresultaat dat je af wil drukken. Da's geen rocket-science.

https://niels.nu


  • GAITii
  • Registratie: December 2008
  • Laatst online: 23:03
@ Hydra, was nog niet klaar... Check aanpassing vorige post van mij.

Steam: GAITii | PSN: GAITii | 3DS FC: 0361-7487-5231


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
GerbenKwakkel schreef op woensdag 19 februari 2014 @ 09:48:
@ Hydra, was nog niet klaar... Check aanpassing vorige post van mij.
Dat kon ik niet ruiken.

Er zit een fout in je setup. Je wil tijdens het itereren over de resultset deze afdrukken. "fetch array" levert een enkele rij op (id + groupname), jij wijst deze telkens aan dezelfde var toe. Zo druk je dus hoogstens de laatste af. Jij denkt om een of andere reden dat er per query row een array terugkomt. Je zou moeten zien in je resultaat dat dat niet het geval is.

https://niels.nu


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Die twee queries slaan al nergens op, als je een left join gebruikt heb je er maar één nodig. En dat is hierboven dus al een keer gezegd. Je vraagt hierboven "Maar kan er ook gezegd worden hoe ik dit eventueel wel kan oplossen?" terwijl ik met de toen gegeven informatie allang had gezegd dat je dan een union moest hebben en ook na je post met meer/andere info was de left join al genoemd voordat je die post compleet negeerde en zegt dat wat je nu hebt het niet werkt. Als je nou ook gewoon wat doet met de adviezen die je krijgt heeft dit topic misschien ook nog zin. ;)

Ik zal je zelfs de query voorkauwen:
SQL:
1
2
3
4
5
SELECT `group`.`groupid`, `group`.`groupname`, LEAST(COUNT(usergroup.userid), 1) AS isSelected
FROM `group`
LEFT JOIN usergroup ON usergroup.groupid = group.groupid
WHERE usergroup.userid = $_GET['user_view']
GROUP BY group.groupid, group.groupname

Vervolgens heb je in isSelected staan of hij nou wel of niet geselecteerd is.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1