• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Beta-testers gezocht voor Crypto-oefenplatform

    Syntax 29 januari 2026 om 16:11
  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 19 januari 2026 om 09:34
  • Developer Gezocht

    Mikevdk 10 januari 2026 om 18:57
  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 26 december 2025 om 00:07
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

SQL Kennis

  • Stefan.J
  • 3 december 2009 om 23:49
  • Closed
  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 3 december 2009 om 23:49
    • #1

    Beste CP'ers,

    Het lijkt er steeds op dat het SQL niveau op CP heel laag is. Daarom wil ik een uitdaging starten. De bedoeling is heel simpel: Je moet een select-query schrijven die aan de informatie behoefte voldoet. We beginnen met de volgende database structuur. Creëer dus een database, en voer de volgende query's uit.

    PHP
    CREATE TABLE guestbooks (
     id INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
     name VARCHAR(50) NOT NULL DEFAULT 'Gastenboek',
     site VARCHAR(255) NOT NULL,
     PRIMARY KEY(id),
     UNIQUE(site)
    )ENGINE=InnoDB;
    
    
    CREATE TABLE authors (
     id INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
     name VARCHAR(30) NOT NULL,
     PRIMARY KEY(id),
     UNIQUE(name)
    )ENGINE=InnoDB;
    
    
    CREATE TABLE messages (
     id INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
     guestbook_id INT(5) UNSIGNED NOT NULL,
     author_id INT(5) UNSIGNED NULL,
     orginal INT(5) UNSIGNED NULL,
     title VARCHAR(100) NOT NULL,
     message TEXT NOT NULL,
     PRIMARY KEY (id),
     CONSTRAINT fk_messages_guestbook
      FOREIGN KEY (guestbook_id)
      REFERENCES guestbooks(id)
       ON DELETE CASCADE
       ON UPDATE CASCADE,
     CONSTRAINT fk_messages_author
      FOREIGN KEY (author_id)
      REFERENCES authors(id)
       ON DELETE SET NULL
       ON UPDATE CASCADE
    )ENGINE=InnoDB;
    Toon Meer

    Een belangrijke toelichting: Orginal is een INT die kan verwijzen naar een record in de eigen tabel (messages). Wanneer orginal NULL is, is het zelf een origineel bericht, anders is het een bewerking. Let op! Je kunt dus ook een bewerking op een bewerking hebben!

    Vervolgens stoppen we de volgende populatie in onze database:

    PHP
    INSERT INTO guestbooks (id,name,site) VALUES
     (1,'Mijn gastenboek','http://www.mijnonlinegastenboek.nl'),
     (2,'Appels & Co','http://www.appelsenco.nl'),
     (3,'Blog gastenboek','http://www.barry-en-ronnie-hun-blog.nl');
    
    
    INSERT INTO authors (id,name) VALUES
     (1,'Stefan'),(2,'Henk'),(3,'Jan'),(4,'Connie'),(5,'Els'),(6,'Anne'),(7,'Niels'),(8,'Barrie'),(9,'Ronnie');
    
    
    INSERT INTO messages (id,guestbook_id,author_id,orginal,title,message) VALUES
     (1,1,1,NULL,'Hallo','Leuk gastenboek'),
     (2,1,4,NULL,'Hallo','Leuk gastenboek'),
     (3,1,7,NULL,'Hallo','Leuk gastenboek'),
     (4,1,3,NULL,'Hallo','Leuk gastenboek'),
     (5,1,1,1,'Hallo','Leuk gastenboek EDIT'),
     (6,1,5,NULL,'Hallo','Leuk gastenboek'),
     (7,1,5,NULL,'Hallo','Leuk gastenboek'),
     (8,1,2,NULL,'Hallo','Leuk gastenboek'),
     (9,1,6,NULL,'Hallo','Leuk gastenboek'),
     (10,2,8,NULL,'Hallo','Leuk gastenboek'),
     (11,2,3,NULL,'Hallo','Leuk gastenboek'),
     (12,2,6,NULL,'Hallo','Leuk gastenboek'),
     (13,2,1,NULL,'Hallo','Leuk gastenboek'),
     (14,2,1,13,'Hallo','Leuk gastenboek EDIT'),
     (15,2,2,NULL,'Hallo','Leuk gastenboek'),
     (16,2,6,12,'Hallo','Leuk gastenboek'),
     (17,1,4,NULL,'Hallo','Leuk gastenboek'),
     (18,1,2,NULL,'Hallo','Leuk gastenboek'),
     (19,1,9,NULL,'Hallo','Leuk gastenboek'),
     (20,1,7,3,'Hallo','Leuk gastenboek'),
     (21,1,8,NULL,'Hallo','Leuk gastenboek'),
     (22,1,3,NULL,'Hallo','Leuk gastenboek'),
     (23,1,6,9,'Hallo','Leuk gastenboek'),
     (24,1,1,NULL,'Hallo','Leuk gastenboek'),
     (25,1,2,NULL,'Hallo','Leuk gastenboek'),
     (26,3,1,NULL,'Hallo','Leuk gastenboek'),
     (27,3,6,NULL,'Hallo','Leuk gastenboek'),
     (28,3,5,NULL,'Hallo','Leuk gastenboek'),
     (29,3,6,27,'Hallo','Leuk gastenboek'),
     (30,3,1,26,'Hallo','Leuk gastenboek');
    Toon Meer

    De informatie behoefte (vraag) is als volgt: Geef een lijst van alle gebruikers met het aantal keer dat zij een bericht hebben gewijzigd.

    De verwachte populatie is als volgt:

    PHP
    +-------+-------+-----------+
    |id     |name   | num_edits |
    +-------+-------+-----------+
    |1      |Stefan |         3 |
    |2      |Henk   |         0 |
    |3      |Jan    |         0 |
    |4      |Connie |         0 |
    |5      |Els    |         0 |
    |6      |Anne   |         3 |
    |7      |Niels  |         1 |
    |8      |Barrie |         0 |
    |9      |Ronnie |         0 |
    +-------+-------+-----------+
    Toon Meer

    Oplossingen graag via PB, en NIET hier!

    Voorlopig is er geen prijs, tenzij iemand nog iets in de aanbieding heeft, of een ander crewlid iets leuks bedenkt. Alle goede inzendingen worden in ieder geval gemeld!

    Dus criminalspoint laat zien wat je kunt!

    Allemaal veel succes, en ik hoop op veel deelname.

  • Niels
    -1
    Berichten
    1.360
    • 4 december 2009 om 10:43
    • #2

    Ik heb hem al ;) Stuur hem via wave wel om de pret niet te bederven

    PHP
    id 	name 	num_edits
    1 	Stefan 	3
    2 	Henk 	0
    3 	Jan 	0
    4 	Connie 	0
    5 	Els 	0
    6 	Anne 	3
    7 	Niels 	1
    8 	Barrie 	0
    9 	Ronnie 	0

    -1

  • JeroenH
    Intermediate
    Berichten
    420
    • 4 december 2009 om 11:36
    • #3

    Pm gestuurt :)

    PHP
    id 	name 	num_edits
    1 	Stefan 	3
    2 	Henk 	0
    3 	Jan 	0
    4 	Connie 	0
    5 	Els 	0
    6 	Anne 	3
    7 	Niels 	1
    8 	Barrie 	0
    9 	Ronnie 	0

    Toon Records 0 - 8 (9 totaal, Query duurde 0.0005 sec)

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 4 december 2009 om 12:37
    • #4

    Beide inzendingen kloppen inderdaad! Netjes! Ik hou het nog even bij deze query, mocht het inzenden een beetje tot een eind lopen zal ik een moeilijkere query geven.:) Op de zelfde database uiteraard.

  • Darsstar
    Vreemd
    Berichten
    1.173
    • 4 december 2009 om 13:28
    • #5

    Ik heb er twee ingestuurd...
    En beiden werken...

    miauw!

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 4 december 2009 om 23:34
    • #6

    Inderdaad inmiddels heb ik in totaal 4 inzendingen, namelijk van:
    Niels, JeroenH, Darsstar en MrMees.

    MrMees is er nog niet helemaal uit, en Darsstar heeft zelfs twee oplossingen gegeven (één met subquery, en één met join).

    Binnenkort zal ik een nieuwe uitdaging plaatsen! Dus jullie hebben nog even de tijd.:cheer::cheer:

  • Niels
    -1
    Berichten
    1.360
    • 5 december 2009 om 13:07
    • #7

    Dos is gewoon een uitslover :p

    -1

  • MrMees
    De causeur!
    Berichten
    464
    • 5 december 2009 om 17:30
    • #8
    PHP
    id 	name 	num_edits
    1 	Stefan 	3
    2 	Henk 	0
    3 	Jan 	0
    4 	Connie 	0
    5 	Els 	0
    6 	Anne 	3
    7 	Niels 	1
    8 	Barrie 	0
    9 	Ronnie 	0

    Met een beetje hulp gelukt!

    Rembo&Rembo.

    http://www.criminalspoint.com/db/artikel/317.html

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 6 december 2009 om 20:00
    • #9

    Ik hoop natuurlijk op nog meer inzendingen!

    Morgen kom ik waarschijnlijk met een nieuwe informatie behoefde. Dus voor iedereen weer een nieuwe query, natuurlijk wel een beetje moeilijker.;)

    Nieuwe reactie samengevoegd met originele reactie op 06.12.09 19:51:33:
    Ik begin met de vorige inzendingen, deze kwamen van:
    JeroenH
    Niels
    Darsstar
    MrMees
    Alle inzendingen waren goed!

    De orginele oplossing die ik had was:

    PHP
    SELECT a.id, a.name, COUNT(m.orginal) AS num_edits FROM authors a LEFT JOIN messages m ON m.author_id = a.id GROUP BY m.author_id

    Toevoegingen hieraan zijn:
    JeroenH:

    Citaat

    Hoewel ik eigenlijk geen count wilde gebruiken op InnoDB vanwege de performance.

    InnoDB is hier inderdaad niet snel in. Echter, het gaat nu even om je kunnen, en we kampen nu eenmaal even met het feit dat we MySQL gebruiken (Iedereen draait MySQL, daarom heb ik voor MySQL gekozen).

    Darsstar:

    PHP
    SELECT
        a.id,
        a.name,
        (SELECT COUNT(*) FROM messages m WHERE m.author_id = a.id AND orginal IS NOT NULL) AS num_edits
    FROM
        authors a
    ORDER BY
        id

    Een mooie oplossing met een subquery.

    Een nieuwe uitdaging voor jullie! De nieuwe informatie behoefte is:

    Geef van alle auteurs het ID en de naam het aantal berichten, de gemiddelde lengte van hun berichten (afgerond), de naam het gastenboek waarin ze de meeste berichten hebben geplaatst, en voor hoeveel procent de berichten in dat gastenboek van de auteur is. Order de resultaten op het aantal berichten.

    Het verwachte resultaat is:

    PHP
    id      name     num_messages   avg_length      most_posted     procent
    1       Stefan   7              16      Mijn gastenboek         43
    6       Anne     6              15      Blog gastenboek         33
    2       Henk     4              15      Mijn gastenboek         75
    3       Jan      3              15      Mijn gastenboek         67
    5       Els      3              15      Mijn gastenboek         67
    7       Niels    2              15      Mijn gastenboek         100
    4       Connie   2              15      Mijn gastenboek         100
    8       Barrie   2              15      Appels & Co             50
    9       Ronnie   1              15      Mijn gastenboek         100

    Deze is echt niet makkelijk! Veel succes dus. De bedoeling is het resultaat in ??n query. Lukt je dat niet, mag je het ook met een view proberen, of met PHP (meerdere query's). Meerdere oplossingen is alleen maar leuk!

  • L.Groot
    Elite members
    Ontvangen Reacties
    31
    Berichten
    4.888
    • 6 december 2009 om 21:05
    • #10

    Pfoe, dat is wel lastig.
    Ik ga eens wat proberen :p

  • MrMees
    De causeur!
    Berichten
    464
    • 6 december 2009 om 21:33
    • #11
    PHP
    id 	name 	num_messages 	avg_length 	most_posted 	procent
    1 	Stefan 	7 	16 	Mijn gastenboek 	7
    6 	Anne 	6 	15 	Mijn gastenboek 	6
    2 	Henk 	4 	15 	Mijn gastenboek 	4
    5 	Els 	3 	15 	Mijn gastenboek 	3
    3 	Jan 	3 	15 	Mijn gastenboek 	3
    4 	Connie 	2 	15 	Mijn gastenboek 	2
    7 	Niels 	2 	15 	Mijn gastenboek 	2
    8 	Barrie 	2 	15 	Appels & Co 	2
    9 	Ronnie 	1 	15 	Mijn gastenboek 	1

    Alleen de procenten lukken niet echt!

    En bij Anne is most_posted anders, maar dat komt denk ik omdat het bij elk gastenboek 33,33333 procent is.
    Maakt dit uit?

    Rembo&Rembo.

    http://www.criminalspoint.com/db/artikel/317.html

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 6 december 2009 om 22:54
    • #12

    Nee, dat maakt niet uit. Ik heb mijn populatie ook een keer aangepast, misschien heeft het daar mee te maken (Wel weer terug gezet). Ben wel heel benieuwd naar je oplossing! Want hij is inderdaad lastig.:cheer:

  • JeroenH
    Intermediate
    Berichten
    420
    • 6 december 2009 om 23:03
    • #13

    Ik vraag me af of het echt zo werkt Mees.

    Nieuwe reactie samengevoegd met originele reactie op 06.12.09 23:46:13:
    Ik kom morgen met mijn query, heb nu geen tijd.

  • MrMees
    De causeur!
    Berichten
    464
    • 13 december 2009 om 20:22
    • #14

    Heeft iemand al de oplossing?

    En Killingdevil kun je nog reageren op mijn PB?

    Rembo&Rembo.

    http://www.criminalspoint.com/db/artikel/317.html

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37

Gebruikers die dit topic bekijken

  • 1 Gasten
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design