Multiple querys die je nodig hebt na normaliseren

Door - -, 17 jaar geleden, 4.020x bekeken

Als je je datamodel genormaliseerd hebt, is de kans groot dat je multiple querys nodig hebt. Hier wordt dat uitgelegd.

Graag commentaar op deze tutorial!

Gesponsorde koppelingen

Inhoudsopgave

  1. Inleiding
  2. Slecht voorbeeld
  3. De nieuwe en goede tabellen
  4. Iets minder slecht voorbeeld
  5. Het ophalen
  6. Einde

 

Er zijn 22 reacties op 'Multiple querys die je nodig hebt na normaliseren'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Klaasjan Boven
Klaasjan Boven
17 jaar geleden
 
0 +1 -0 -1
Ja leuk dat is inderdaad het id.
Ik zou trouwens wel wat doen aan de naamgeving ipv vader vader_id in alle tabellen behalve vaderproduct
- -
- -
17 jaar geleden
 
0 +1 -0 -1
Ok, zal ik ff doen.
Edit:
Gedaan.
Frank -
Frank -
17 jaar geleden
 
0 +1 -0 -1
Tja, leuk en aardig, maar je vergeet uit te leggen wat nu een JOIN is, welke JOIN's er zijn en wat deze nu precies doen. Het is niet een tutorial waar je echt veel aan hebt.

Zie verder deze tutorial over JOIN's, daar zul je meer aan hebben.

Volgende keer beter!
- -
- -
17 jaar geleden
 
0 +1 -0 -1
Ik wil het even simpel houden, zonder JOIN's, ook omdat er al zo'n tutorial was.
Edit:
Ik zal wel even in het Einde een link naar de JOIN tutorial maken.

Edit:
Gedaan.

Edit:
Typo.
Frank -
Frank -
17 jaar geleden
 
0 +1 -0 -1
Zonder JOIN's? Dat gaat niet, zie jouw queries, daar staan ze ook in!

Je benoemt dan misschien wel niet expliciet een JOIN, maar ze staan er toch echt in. Een JOIN legt namelijk het verband tussen tabel A en tabel B:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE a.id = b.id_a
is gewoon een JOIN. Vandaar dat de andere tutorial een betere is.

Het gaat niet om multiple queries, maar om het verband tussen tabellen. Naar mijn idee betekent 'multiple queries' dat er meer dan 1 query wordt uitgevoerd. En dat heeft niets te maken met het datamodel of verbanden tussen verschillende tabellen.
- -
- -
17 jaar geleden
 
0 +1 -0 -1
@Frank: Ok, jij wint.
K i p
K i p
17 jaar geleden
 
0 +1 -0 -1
Je:
SELECT producten.id, vaderproducten.naam, makers.maker, consoles.console, types.type, producten.prijs, producten.vooraad FROM producten, vaderproducten, makers, consoles, types WHERE producten.vader_id = vaderproducten.id AND vaderproducten.maker_id = makers.id AND producten.console_id = consoles.id AND producten.type_id = types.id ORDER BY vaderproducten.naam ASC
Aaaah! Ik ben allergisch voor van die onoverzichtelijke codes (PHP, SQL, whatever)!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
SELECT
    producten.id,
    vaderproducten.naam,
    makers.maker,
    consoles.console,
    types.type,
    producten.prijs,
    producten.vooraad
FROM
    producten,
    vaderproducten,
    makers,
    consoles,
    types
WHERE
    producten.vader_id = vaderproducten.id
AND
    vaderproducten.maker_id = makers.id
AND
    producten.console_id = consoles.id
AND
    producten.type_id = types.id
ORDER BY
    vaderproducten.naam
    ASC
:-)
Mebus  Hackintosh
Mebus Hackintosh
17 jaar geleden
 
0 +1 -0 -1
Het is ook beter als je een integer unsigned maakt... Zo kan je ook gebruik maken van INET_ATON
en aangezien je toch geen gebruik maakt van negatieve getallen...

Zo is je bereik ook groter als 2,7 miljard ( niet dat je dit zo snel zal halen )

Verder vind ik het eigenlijk een combinatie van 2 soorten tutorials namelijk normalisatie en meerdere tabellen tegelijk selecteren terwijl er van bijde van deze 2 onderwerpen al 2 goede tutorials waren.

Verder wel mooi uitgelegt:) en goede voorbeelden gebruikt
Frank -
Frank -
17 jaar geleden
 
0 +1 -0 -1
Quote:
@Frank: Ok, jij wint.
Daar gaat het mij echt niet om hoor. Wanneer het aankomt op het aantal tutorials, dan win jij met gemak! Shame on me...

Ik kijk of de tut compleet is en beschrijft wat ik er van verwacht. Op basis daarvan geef ik commentaar. (Au, dat is eigenlijk wel h??l erg gemakkelijk...)

M'n complimenten dat je een tut schrijft en jouw kennis met anderen deelt!
- -
- -
17 jaar geleden
 
0 +1 -0 -1
@Boris: ik heb je allergie-opwekkende codes veranderd.
@mebus: eerst had ik ook unsigned, maar ik dacht dat jullie het bullshit zouden vinden. Zelf gebruik ik het altijd. Ik heb het nu wel toegevoegd.
@Frank: Klopt, dit is niet volledig nee.
Edit:
Typo.
Mebus  Hackintosh
Mebus Hackintosh
17 jaar geleden
 
0 +1 -0 -1
Verder zie ik nu ook dat je bijna overal int voor gebruikt terwijl dit toch niet altijd een int hoeft te zijn kijk ook eens naar tinyint of mediumint Want ik denk niet dat er 2 miljard soorten consoles zijn:p Zo de tabellen zijn nog niet helemaal perfect vind ikzelf dan.

Scheelt weer wat bits:)
Robert Deiman
Robert Deiman
17 jaar geleden
 
0 +1 -0 -1
Mebus heeft wel een punt voor wat het type tabellen betreft.

Je tutorial is gemakkelijk te volgen, en je geeft even aan dat gegevens niet in 1 tabel hoeven staan om er goed mee te kunnen werken, wat voor mijn gevoel ook het grootste nut is van de tutorial.

@Frank
Als hij ging uitleggen welke typen JOINS er zijn, en hoe je die moet gebruiken dan zou die een tut maken die er al was. Ik bvind het wel een goede zo.
- -
- -
17 jaar geleden
 
0 +1 -0 -1
@mebus: dat zijn details, ikzelf vind het zo goed :P
Leroy Boerefijn
Leroy Boerefijn
17 jaar geleden
 
0 +1 -0 -1
leuke tut :)

maar die query is onnodig lang..
je kan bij te tables (de FROM CLAUSE) beter een AS toevoegen bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
SELECT
    p.id,
    v.naam,
    m.maker,
    c.console,
    t.type,
    p.prijs,
    p.vooraad
FROM
    producten AS p,
    vaderproducten AS v,
    makers AS m,
    consoles AS c,
    types AS t
WHERE
    p.vader_id = v.id
AND
    v.maker_id = m.id
AND
    p.console_id = c.id
AND
    p.type_id = t.id
ORDER BY
    v.naam
    ASC

dit is een stuk korter (zeker als je nog meer wilt selecteren) ;)

Edit:
stomme fout :$
bedankt voor het melden frank :P
Frank -
Frank -
17 jaar geleden
 
0 +1 -0 -1
@Leroy: Nu ga je de mist in bij de WHERE-clausule. Ook daar zul je de aliassen moeten gebruiken. Overigens is AS niet nodig en is het vaak handiger om een alias van minimaal 2 karakters te gebruiken. Zorg er in elk geval voor dat jij voor jezelf een standaard hanteert, dan kan er zelden wat mis gaan.
- -
- -
17 jaar geleden
 
0 +1 -0 -1
Heldere tut! Ik zou er zeker wat aan hebben gehad, als ik het niet al wist ;)
PHP erik
PHP erik
17 jaar geleden
 
0 +1 -0 -1
Ik moet zeggen dat deze tutorial daadwerkelijk handig kan zijn voor veel mensen, omdat het allemaal erg simpel en duidelijk wordt uitgelegd. Jonathan, een uniek moment: mijn complimenten.
Robert Deiman
Robert Deiman
17 jaar geleden
 
0 +1 -0 -1
Het is trouwens een leuke inleiding, om vervolgens met de uitgebreide join tutorial verder te gaan. :) Leuk gedaan!
Harmen
Harmen
17 jaar geleden
 
0 +1 -0 -1
Leuk!
ik was er net mee begonnen, met dat normaliseren. komt precies op tijd :D
Remco
remco
17 jaar geleden
 
0 +1 -0 -1
Ik heb even een vraagje.
Ik heb een aantal tabellen genormaliseerd maar nu loop ik een beetje vast.
Ik heb:
tabel wedstrijden
-id
-thuis_id
-uit_id
-datum
-uitslag

tabel clubs
-id
-naam
-logo

Nu loop ik een beetje vast op het feit hoe ik nou via wat hier uitgelegd is hoe ik dit kan combineren en of het wel valt te combineren.

Ik hoop dat dit een beetje duidelijk is en dat iemand weet hoe dit kan worden opgelost.

MVG Remco

P.S. Leuke en goede tutorial.
Joeri
Joeri
17 jaar geleden
 
0 +1 -0 -1
Mooie Tut, zeer duidelijk en eenvoudig uitgelegd en er zitten idd eigenlijk wel JOIN's in maar vind je opmerking terecht dat je het eenvoudig wilde houden en dat daar reeds een uitgebreide en tevens goede tut over bestond. Denk dat dit een zeer aanvullende tut is voor veel beginnende php/mysql'ers.

Knap werk
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Tobias Tobias
Tobias Tobias
13 jaar geleden
 
0 +1 -0 -1
ik maak ook vaak gebruik van IN,
bv:

SELECT DISTINCT productnummer
FROM product_subcategorie
WHERE subcat_id
IN
(SELECT subcat_id FROM subcategorie
WHERE cat_id = '$cat_id')

Zo krijg ik alle producten 1 keer (distinct)die voorkomen in de subcategorieƫn welke voorkomen in de opgegeven categorie

Wat is beter/handiger?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. Inleiding
  2. Slecht voorbeeld
  3. De nieuwe en goede tabellen
  4. Iets minder slecht voorbeeld
  5. Het ophalen
  6. Einde

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.