Account vraagje

    • Dat is het "nadeel" van het groeperen: je groepeert meerdere account-records op basis van IP. Het is dan redelijk willekeurig welke (enkele) naam wordt getoond in een resultaatrij. Daarom gebruik je GROUP_CONCAT(). Deze trekt de namen van meerdere kolommen samen in één rij.

      Zoals ik al aangaf, een alternatief is dat je, uitgaande van die IP's een nieuwe query (of subquery) bakt waarin je die records dus wel apart (in meerdere rijen) opvraagt.

      Maar dan nog, als je deze informatie vervolgens toont op een scherm dan zul je deze IP's toch op een of andere manier "grafisch" moeten groeperen, door tijdens het uitlezen bij te houden welke accounts -op basis van IP- bij elkaar horen.

      Misschien heb je iets aan het volgende, voortbordurend op het vorige voorbeeld:

      PHP Source Code

      1. <?php
      2. // Voor debugging.
      3. error_reporting(E_ALL);
      4. ini_set('display_errors', 'stdout');
      5. // Voor output.
      6. header('Content-Type: text/html; charset=UTF-8');
      7. // Maak database connectie.
      8. $db = new mysqli('<host_of_ip>', '<username>', '<password>', '<database>');
      9. $db->set_charset('utf8');
      10. // We maken hier gebruik van een subquery die bepaalt welke IP's meerdere keren voorkomen.
      11. // Vervolgens vragen we alle relevante account-informatie op met die IP's.
      12. $res = $db->query(
      13. 'SELECT l.ip, l.username
      14. FROM leden l
      15. WHERE l.ip IN (
      16. SELECT ip
      17. FROM leden
      18. GROUP BY ip
      19. HAVING COUNT(ip) > 1
      20. )
      21. ORDER BY l.ip, l.username'
      22. );
      23. $currentIp = '';
      24. while ($row = $res->fetch_assoc()) {
      25. // Wanneer het IP verandert tijdens het uitlezen van accounts met eenzelfde IP, toon nieuw kopje.
      26. if ($row['ip'] != $currentIp) {
      27. // IP is veranderd sinds vorige iteratie, sla deze op.
      28. $currentIp = $row['ip'];
      29. ?><h2><?php echo $row['ip'] ?></h2><?php
      30. }
      31. // Toon informatie van account, dit kun je uiteraard nog uitbreiden met meer informatie.
      32. ?><p><?php echo $row['username'] ?></p><?php
      33. }
      34. // Geef resultaat vrij.
      35. $res->free();
      36. ?>
      Laat alles zien
      En als dit allemaal abracadabra is, dan loont het misschien de moeite om je ofwel wat meer te verdiepen in de materie, of een programmeur in te huren/aan te nemen.
    • FangorN wrote:

      Dat is het "nadeel" van het groeperen: je groepeert meerdere account-records op basis van IP. Het is dan redelijk willekeurig welke (enkele) naam wordt getoond in een resultaatrij. Daarom gebruik je GROUP_CONCAT(). Deze trekt de namen van meerdere kolommen samen in één rij.

      Zoals ik al aangaf, een alternatief is dat je, uitgaande van die IP's een nieuwe query (of subquery) bakt waarin je die records dus wel apart (in meerdere rijen) opvraagt.

      Maar dan nog, als je deze informatie vervolgens toont op een scherm dan zul je deze IP's toch op een of andere manier "grafisch" moeten groeperen, door tijdens het uitlezen bij te houden welke accounts -op basis van IP- bij elkaar horen.

      Misschien heb je iets aan het volgende, voortbordurend op het vorige voorbeeld:

      PHP Source Code

      1. <?php
      2. // Voor debugging.
      3. error_reporting(E_ALL);
      4. ini_set('display_errors', 'stdout');
      5. // Voor output.
      6. header('Content-Type: text/html; charset=UTF-8');
      7. // Maak database connectie.
      8. $db = new mysqli('<host_of_ip>', '<username>', '<password>', '<database>');
      9. $db->set_charset('utf8');
      10. // We maken hier gebruik van een subquery die bepaalt welke IP's meerdere keren voorkomen.
      11. // Vervolgens vragen we alle relevante account-informatie op met die IP's.
      12. $res = $db->query(
      13. 'SELECT l.ip, l.username
      14. FROM leden l
      15. WHERE l.ip IN (
      16. SELECT ip
      17. FROM leden
      18. GROUP BY ip
      19. HAVING COUNT(ip) > 1
      20. )
      21. ORDER BY l.ip, l.username'
      22. );
      23. $currentIp = '';
      24. while ($row = $res->fetch_assoc()) {
      25. // Wanneer het IP verandert tijdens het uitlezen van accounts met eenzelfde IP, toon nieuw kopje.
      26. if ($row['ip'] != $currentIp) {
      27. // IP is veranderd sinds vorige iteratie, sla deze op.
      28. $currentIp = $row['ip'];
      29. ?><h2><?php echo $row['ip'] ?></h2><?php
      30. }
      31. // Toon informatie van account, dit kun je uiteraard nog uitbreiden met meer informatie.
      32. ?><p><?php echo $row['username'] ?></p><?php
      33. }
      34. // Geef resultaat vrij.
      35. $res->free();
      36. ?>
      Laat alles zien
      En als dit allemaal abracadabra is, dan loont het misschien de moeite om je ofwel wat meer te verdiepen in de materie, of een programmeur in te huren/aan te nemen.
      Het is toch gelukt. GROUP_CONCAT(username) moest zijn GROUP_CONCAT(username) AS gebruikersnaam. Net zoals die IP. Evengoed bedankt voor de hulp. Hier kan een slotje op.
      Wilt u met uw website hoger komen in Google? Interesse in een source? Scripter nodig?

      Interesse in de Maffiabaas source, Pokemon source of hetzelfde systeem als MijnMaffia? Stuur me een PM.