• 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

  • 350 Nieuwe Domeinnamen Januari 2026

    shiga 1 februari 2026 om 14:21
  • 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

SQL Basis [1]

  • JeroenH
  • 6 januari 2010 om 17:02
  • Closed
  • JeroenH
    Intermediate
    Berichten
    420
    • 6 januari 2010 om 17:02
    • #1

    Ik zie hier op CP vaak hele slechte scripts met rampzalige MySQL databases erachter. Een groot deel van de load op de server wordt veroorzaakt door deze query's, en het leek mij dus handig hier wat meer informatie over te geven.

    Laten we even van een database uitgaan waarin de volgende gegevens staan:

    Tabel Gebruikers:

    - gebruiker_id
    - gebruiker_naam
    - gebruiker_password
    - gebruiker_rank

    Tabel Auto:

    - auto_id
    - auto_type
    - auto_schade
    - auto_eigenaar

    Hoe maak je dit in MySQL; Ik laat hier een paar extra commando's achterwege om het begrijpelijk te houden, misschien maak ik daar later nog een topic over.

    De create statements:

    PHP
    CREATE table Gebruikers (
     gebruiker_id INT(10) AUTO_INCREMENT,
     gebruiker_naam VARCHAR(20) NOT NULL,
     gebruiker_password VARCHAR(50) NOT NULL,
     gebruiker_rank ENUM('Rank1','Rank2','Rank3') DEFAULT 'Rank1' NOT NULL, 
    PRIMARY KEY (gebruiker_id)
    )
    
    
    CREATE table Auto (
     auto_id INT(10) AUTO_INCREMENT,
     auto_type INT(3) NOT NULL,
     auto_schade INT(2) NOT NULL,
     auto_eigenaar INT(10) NOT NULL,
    PRIMARY KEY (auto_id),
    FOREIGN KEY (auto_eigenaar)
     REFERENCES Gebruikers
    )
    Toon Meer

    LET OP: auto_eigenaar is een INTEGER (getal), we slaan expres NIET te gebruikersnaam op in Auto, aangezien het op deze manier sneller is en ook handiger: Als je immers een gebruikersnaam wilt wijzigen hoef je niet alle auto's van deze gebruiker up te daten. Voor de duidelijkheid: auto_eigenaar refereert dus naar gebruiker_id en niet naar gebruiker_naam.
    Normaal gezien zou je dus ook nog een tabel met auto types hebben en daar dus ook een foreign key naartoe. Natuurlijk zou je ook in PHP een SWITCH kunnen maken, maar als je later een auto wilt toevoegen of wijzigen is dit vele malen makkelijker: Je kunt deze optie nu zelfs in je Administrator/Moderator paneel zetten.

    Hoe maak je nou een lijst met auto's en de daarbijbehorende eigenaarsNAAM (en dus niet ID zoals in Tabel Auto staat)?

    Nou gewoon zo:

    PHP
    $query = mysql_query("
    SELECT a.auto_type,a.auto_schade,g.gebruiker_naam FROM Auto a 
    LEFT JOIN Gebruikers g
    ON a.auto_eigenaar = g.gebruiker_id
    ");

    Door middel van een WHILE kan je makkelijk een lijst van auto's weergeven in PHP:

    PHP
    while($show = mysql_fetch_assoc($query)){
    echo '
    Type:     '.$show['auto_type'].'<BR>
    Schade:   '.$show['auto_schade'].'<BR>
    Eigenaar: '.$show['gebruiker_naam'].'
    ';
    }
  • Guest, wil je besparen op je domeinnamen? (ad)
  • MrMees
    De causeur!
    Berichten
    464
    • 6 januari 2010 om 17:26
    • #2

    Top dat dit is uitgelegd!
    Ik weet zeker dat veel mensen hier iets aan zullen hebben.

    Misschien even bij Artikelen zetten?

    Rembo&amp;amp;Rembo.

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

  • YVMdesign
    Intermediate
    Berichten
    357
    • 6 januari 2010 om 17:27
    • #3

    Ik maak een tabel in phpmyadmin, en voer dan alles in.
    Is dat zo erg dan?

  • Jannick
    nyan nyan nyan nyan
    Berichten
    1.972
    • 6 januari 2010 om 17:36
    • #4

    Zou je verder willen ingaan op de verschillende soorten keys? Misschien wel slim, mocht men het anders willen doen ;)

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 6 januari 2010 om 17:54
    • #5

    Ja, tables maken in PHPMyAdmin is niet aangeraden. Je kunt je keys geen namen geven, en geen CONSTRAINTS aanmaken (Zowel CHECK als FOREIGN KEY).

    Enkele verbeteringen:

    Je referentie is niet compleet. Om hem compleet te maken:

    PHP
    CREATE table Gebruikers (
     gebruiker_id INT(10) AUTO_INCREMENT,
     gebruiker_naam VARCHAR(20) NOT NULL,
     gebruiker_password VARCHAR(50) NOT NULL,
     gebruiker_rank ENUM('Rank1','Rank2','Rank3') DEFAULT 'Rank1' NOT NULL, 
    PRIMARY KEY (gebruiker_id)
    )
    
    
    CREATE table Auto (
     auto_id INT(10) AUTO_INCREMENT,
     auto_type INT(3) NOT NULL,
     auto_schade INT(2) NOT NULL,
     auto_eigenaar INT(10) NOT NULL,
    PRIMARY KEY (auto_id),
     CONSTRAINT fk_auto_gebruiker
     FOREIGN KEY (auto_eigenaar)
      REFERENCES Gebruikers(gebruiker_id)
       ON UPDATE CASCADE
       ON DELETE CASCADE
    )
    Toon Meer

    Als je het definieert via een constraint kun je de constraint een naam meegeven. Dit is handiger met het verwijderen van constraints.

    En als ik vragen mag, waarom geef je alle veldnamen een prefix?

    En een tipje voor jouzelf:

    Citaat


    The display width does not constrain the range of values that can be stored in the column, nor the number of digits that are displayed for values having a width exceeding that specified for the column. For example, a column specified as SMALLINT(3) has the usual SMALLINT range of -32768 to 32767, and values outside the range allowed by three characters are displayed using more than three characters.

    When used in conjunction with the optional extension attribute ZEROFILL, the default padding of spaces is replaced with zeros. For example, for a column declared as INT(5) ZEROFILL, a value of 4 is retrieved as 00004. Note that if you store larger values than the display width in an integer column, you may experience problems when MySQL generates temporary tables for some complicated joins, because in these cases MySQL assumes that the data fits into the original column width.

    http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

  • Niels
    -1
    Berichten
    1.360
    • 6 januari 2010 om 18:41
    • #6
    Citaat van YVMdesign

    Ik maak een tabel in phpmyadmin, en voer dan alles in.
    Is dat zo erg dan?


    Bovenop wat Killingdevil zegt komt er ook nog bij kijken dat je er niks van leert.

    -1

  • NielsB
    Junior (Web)Developer
    Berichten
    948
    • 6 januari 2010 om 19:38
    • #7

    Killingdevil goeie tips, verder vind ik het leuk van Jeroen dat hij probeert mensen te helpen.

    Dus vat de tips gewoon positief op en probeer er van te leren.

    School
    Tweedejaars Informatica Student @ Hogeschool Rotterdam.

    Webtalen
    - PHP ( OOP )
    - SQL
    - JavaScript i.c.m. jQuery framework
    - (x)HTML
    - CSS
    - Actionscript
    - XML

    Programmeertalen
    - Java
    - C#
    - Ruby i.c.m. on Rails framework

  • scarface
    Professional
    Berichten
    1.597
    • 6 januari 2010 om 22:35
    • #8

    Ik ben voor iemand een nieuwsbrief systeem aan het maken.
    Maar ik heb momenteel egt extreem tijd de kort en ben nu 5 tegelijk probeeren te helpen maar het lukt me niet meer en ik word gek. !
    Nu zat deze sql erbij maar hier klopt niks van.
    Omdat dit over mysql gaat,Kan iemand hiervan een kloppende voor mij maken?
    Danku zeer alvast. :$

    PHP
    CREATE table m_activeren (
    email varchar (100) NOT NULL,
    code varchar (100) NOT NULL,
    PRIMERY KEY (email)
    )
    
    
    
    
    CREATE TABLE m_admin (
    id INT (11) NOT NULL auto_increment,
    gebruikersnaam varchar(100) NOT NULL,
    wachtwoord varchar(100) NOT NULL,
    PRIMARY KEY (id)
    )
    
    
    CREATE TABLE m_emails (
    email varchar(100) NOT NULL,
    )
    Toon Meer

  • NielsB
    Junior (Web)Developer
    Berichten
    948
    • 6 januari 2010 om 22:48
    • #9
    PHP
    CREATE table m_activeren (
    email int(11) NOT NULL,
    code varchar (100) NOT NULL,
    PRIMERY KEY (email)
    )
    
    
    
    
    CREATE TABLE m_admin (
    id INT (11) NOT NULL auto_increment,
    gebruikersnaam varchar(100) NOT NULL,
    wachtwoord varchar(100) NOT NULL,
    email varchar(100) NOT NULL,
    PRIMARY KEY (id)
    )
    Toon Meer

    Zo moet die ongeveer kloppen.
    Kan altijd nog beter.

    Maar zorg er voor dat in die m_activeren een emailId komt van het account waar de email in staat.

    School
    Tweedejaars Informatica Student @ Hogeschool Rotterdam.

    Webtalen
    - PHP ( OOP )
    - SQL
    - JavaScript i.c.m. jQuery framework
    - (x)HTML
    - CSS
    - Actionscript
    - XML

    Programmeertalen
    - Java
    - C#
    - Ruby i.c.m. on Rails framework

  • scarface
    Professional
    Berichten
    1.597
    • 6 januari 2010 om 22:51
    • #10

    ik krijg nu deze error

    PHP
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'KEY (email) ) CREATE TABLE m_admin ( id INT (11) NOT NULL auto_increment,' at line 4

  • JeroenH
    Intermediate
    Berichten
    420
    • 6 januari 2010 om 23:54
    • #11

    Spatie weghalen na id.

    KillingDevil, "ON CASCADE" is uiteraard een leuke functie, maar in praktijk zal je nooit een gebruiker_id willen veranderen, omdat er dan gaten in je tabel komen (auto_increment). Lijkt me eigenlijk wat overbodig lastig voor de meesten hier :)

    Prefixes zijn omdat er nogal eens dezelfde veldnamen in meerdere tabellen voorkomen, en ik dit zelf overzichtelijker vind.

  • Stefan.J
    Master
    Ontvangen Reacties
    9
    Berichten
    2.358
    • 7 januari 2010 om 14:52
    • #12

    Wanneer je niet aangeeft wat je met de relatie wilt, waarom zou je hem dan nog aanmaken? Aangeven wat je wilt, SET NULL, CASCADE, of NO ACTION / RESTRICT maakt het duidelijker en functioneler (Kun je eigenlijk wel zonder acties een referentie aanmaken?).

    En een gebruiker ID kan maar zo om een of andere vage reden gewijzigd worden, zoals ik op CP ook heb meegemaakt (Of niet Darsstar?:P) Daarbij is de ON DELETE actie wel zeer nuttig.

    En "ON CASCADE"? Klopt niet echt in syntax hé.;)

  • Darsstar
    Vreemd
    Berichten
    1.173
    • 7 januari 2010 om 15:05
    • #13

    Inderdaad...
    Ik had liever dat iemand (Koen) dat ene script had gewijzigd dan dat mijn id veranderd moest worden om van die leuke errors af te komen nadat de database gegevens gewijzigd waren...

    Volgens mij is NO ACTION de standaard actie (bij mysql), en kan je dus referenties aanmaken zonder acties.
    Ook kan je constraints wel via phpmyadmin aanmaken, al is het minder fijn.

    miauw!

  • JeroenH
    Intermediate
    Berichten
    420
    • 9 januari 2010 om 13:15
    • #14

    Klopt, je kan zeker referenties aanmaken zonder verdere acties. Hij kijkt dan nogsteeds of er geen integriteit geschonden wordt, wordt alleen niks mee gedaan.

  • Frenzo
    Guest
    • 9 januari 2010 om 16:55
    • #15

    Dankje , heel handig :)

  • JeroenH
    Intermediate
    Berichten
    420
    • 10 januari 2010 om 12:11
    • #16

    Misschien dat ik nog een wat uitgebreidere uitleg maak binnenkort. o.a. Having, Subqueries, Normalisatie kan ik nog wel wat over vertellen, misschien dat KillingDevil dan ook even wil helpen.

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