'k loop ff vast :(

Status
Niet open voor verdere reacties.

JB'tje

Gebruiker
Lid geworden
31 mei 2004
Berichten
556
Hallo allemaal.....

Ik heb net een mooi script gemaakt om te zoeken naar 'alliantie namen' dit was vrij eenvoudig... maar, nu wil ik dit ook maken voor "username"
dit is wat lastiger, omdat je gegevens uit 2 tabellen nodig hebt.
tabel1: ID, username, en heel veel meer
tabel2: ID, rank, a_soldiers, d_soldiers

nu moet ik ALLE info uit de 2e tabel hebben, EN info uit de eerste tabel.....
Ik ga dus zoeken in de 1e tabel naar de username, moet vervolgens het ID ophalen, en dan de rijen uit de 2e tabel ophalen..... dit laatste lukt niet helemaal.....

Ik zit dus met een array "$ID" en de ID's die daarin staan moeten uit de 2e tabel gehaald worden.....

Hoe doe ik dat???

JB (ik hoop dat de uileg duidelijk is !) :thumb:
 
Dus kolom ID uit tabel1 heeft een relatie met kolom ID uit tabel2 ... Wat voor relatie ?
1 rij uit tabel1 heeft een bijbehorende rij in tabel2 ?
1 rij uit tabel1 heeft meerdere bijbehorende rijen in tabel2 ?
1 rij uit tabel2 heeft meerdere bijbehorende rijen in tabel1 ?


Leuk tijdstip van posten btw :p
 
Geplaatst door JPeetje
Dus kolom ID uit tabel1 heeft een relatie met kolom ID uit tabel2 ... Wat voor relatie ?
hmm, ja, een liefdesrelatie :p... Ze zijn identiek aan elkaar (tenzij er een fout in mijn script zit die ik niet ken :D)
1 rij uit tabel1 heeft een bijbehorende rij in tabel2 ?
1 rij uit tabel1 heeft meerdere bijbehorende rijen in tabel2 ?
1 rij uit tabel2 heeft meerdere bijbehorende rijen in tabel1 ?
eeh, ik zal het ff duidelijk maken... ik heb PER gebruiker 1 plek in elke 2 tabellen genaamd: 'userinfo' en 'armory'
Als je een account aanmaakt, komt is de tabel 'userinfo' (tabel 1) info te staan, als je je account activeerd door in te loggen en je password te 'personaliseren' krijg je ook een rij in de 2e tabel 'armory'
de 'ID' in userinfo en ID in armory zijn geleik aan elkaar !
waarom ik het zo gedaan heb? a: ruimte besparen, aangezien niet iedereen zijn account activeerd bespaar ik ruimte in de tabel 'armory'
b: omdat het me 'verstandig' leek. Als je één tabel maakt met daarin: 29 + 45 (= 74) kolommen raak je het overzicht een beetje kwijt.... ik tenminste !

Leuk tijdstip van posten btw :p
Vanwaar dat???

JB'tje

p.s. verder op die 'ID' na heeft geen enkele rij verband met elkaar, alleen dat ze voor dezelfde speler zijn :)
 
Geplaatst door JB'tje
eeh, ik zal het ff duidelijk maken... ik heb PER gebruiker 1 plek in elke 2 tabellen genaamd: 'userinfo' en 'armory'
Als je een account aanmaakt, komt is de tabel 'userinfo' (tabel 1) info te staan, als je je account activeerd door in te loggen en je password te 'personaliseren' krijg je ook een rij in de 2e tabel 'armory'
de 'ID' in userinfo en ID in armory zijn geleik aan elkaar !
Een 1 op 1 relatie dus, optie 1 :)
waarom ik het zo gedaan heb? a: ruimte besparen, aangezien niet iedereen zijn account activeerd bespaar ik ruimte in de tabel 'armory'
b: omdat het me 'verstandig' leek. Als je één tabel maakt met daarin: 29 + 45 (= 74) kolommen raak je het overzicht een beetje kwijt.... ik tenminste !
Dat overzicht is het enige argument dat een beetje waardig is, de rest lijkt me vrijwel onzin :p
Performance kun je ook nog als argument nemen, maar de enige manier om zeker te weten of 't qua performance daadwerkelijk wat uitmaakt is door te benchmarken.
Vanwaar dat???
'13:37'. '1337'.
Geplaatst door masterprut
Voorbeeldje:
PHP:
$query = 'SELECT a.*, u.* FROM armory a, userinfo u WHERE u.id = ' . $id . ' AND a.id = i.id');


Zoiets :D
Uitgerekend de traagste JOIN geef jij als voorbeeld :rolleyes:

Beter voorbeeld:
Code:
SELECT
userinfo.*,
armory.*

FROM
userinfo
  INNER JOIN armory ON (userinfo.ID = armory.ID)
Succes :)
 
Dat jouw query traag is of hoe mijn query in elkaar steekt ?
 
hmm, wat mij betreft mag je bijden wel uitleggen :p

'13:37'. '1337'.
die 13:37 kan ik wel terug vinden, die 1337 niet..... heb je nog een tip???

Ik denken dat ik eindelijk wat van PHP en mysql snap, komt JPeetje weer met zo'n lastig stuk script aanzette..... :D
PHP:
 $result = mysql_query('SELECT userinfo.userid, userinfo.username, userinfo.race, userinfo.rank, userinfo.gold, armory.a_soldiers, armory.d_soldiers FROM userinfo INNER JOIN armory ON (userinfo.userid = armory.userid) WHERE userinfo.username LIKE "'.$_POST['name'].'"');
'k heb er dit van gemaakt, en het werkt ook nog !!!! YES !
Dat overzicht is het enige argument dat een beetje waardig is
hmm, ik vind juist dat van die ruimte een beetje waardig... het overzicht kun je maken zoals je wilt ! :p

nu nog ff een paar vraagjes,
wat is "Performance" en wat houd "benchmarken" in?
Is het zo dat het nix uitmaakt (wat snelheid betreft) of je de info in 2 tabellen propt of in één tabel???

Greats JB'tje :thumb:
 
Geplaatst door JB'tje
hmm, wat mij betreft mag je bijden wel uitleggen :p
Geplaatst door masterprut
Beide
En weet je wat 't leuke is ? Ik kan beide niet uitleggen :-)

Enige wat ik weet is dat ik een tijdje geleden een database 'test' heb aangemaakt met enkele testtabellen (met onderlinge relaties) en vervolgens via verschillende JOINS data uit beide tabellen geselecteerd heb.
Het resultaat: LEFT, RIGHT en INNER JOIN duurde ~0.19 seconden, het slappe aftreksel van de INNER JOIN (zie masterprut's post, zijn query is dat) duurde ~0,89 seconden. Conclusie spreekt voor zichzelf lijkt me.

Tip: test 't zelf ook ;)
die 13:37 kan ik wel terug vinden, die 1337 niet.....
13:37 = 1337 = leet = elite ... Vonk wel grappig :p
Ik denken dat ik eindelijk wat van PHP en mysql snap, komt JPeetje weer met zo'n lastig stuk script aanzette..... :D
Kep nog veel meer hoor :p
Kijk anders ook eens op http://dad.jpeetje.nl :thumb:
'k heb er dit van gemaakt, en het werkt ook nog !!!! YES !
Tof ;)
Misschien ook nog niet rechtstreeks die $_POST waarde erin zetten ? Kan een beveiligingslek zijn op sommige servers.
wat is "Performance" en wat houd "benchmarken" in?
Performance, snelheid.
Dat je applicatie dus niet retetraag is.
Benchmarken is testen hoe snel iets is. Toen ik 't in m'n vorige post over benchmarken had, bedoelde ik dat je je database eens op beide manieren moet opzetten en moet vullen met ~1.000.000 rijen. Vervolgens een script schrijven die alle data uit je tabel(len) selecteert en kijken welke manier het snelste is.

Succes ;)
 
Geplaatst door JPeetje
En weet je wat 't leuke is ? Ik kan beide niet uitleggen :-)
en dat noemt zich een PHP'er :p hahahahaha

13:37 = 1337 = leet = elite ... Vonk wel grappig :p
ik denk dat ik echt dom ben want zelfs nu snap ik de logica niet ! :confused:

Kijk anders ook eens op http://dad.jpeetje.nl :thumb:Tof ;)
hahaha, leuke site..... p.s.
PHP:
 echo 'IETS';
is ook nog eens sneller dan
PHP:
 echo "IETS";
scheelt wel een paar microseconden !
Misschien ook nog niet rechtstreeks die $_POST waarde erin zetten ? Kan een beveiligingslek zijn op sommige servers.
ik snap het niet helamaal hoe dat een lek kan zijn, maar ik zal het aanpassen ;)

wat dat testen betreft, ik zal het es testen......

JB :thumb:

Test gedaan:
de resultaten zijn:
Alle gegevens in 2 tabellen proppen: 0.395586967468
Alle gegevens in één tabel proppen: 0.302248954773
(dit was volgens mij in microseconden !)
oftewel, als je de gegevens in een tabel propt hoef je er minder uit te halen, en is het sneller ! :)

JB
 
Laatst bewerkt:
Geplaatst door JB'tje
en dat noemt zich een PHP'er :p hahahahaha
Ja, tenslotte heb ik de broncode van MySQL niet ff doorgenomen ... :p
ik denk dat ik echt dom ben want zelfs nu snap ik de logica niet ! :confused:
Tis een internetwoordje waarmee men aangeeft dat iemand supergoed is ;)
hahaha, leuke site..... p.s.
PHP:
 echo 'IETS';
is ook nog eens sneller dan
PHP:
 echo "IETS";
scheelt wel een paar microseconden !
Zeg maar gerust nanoseconden of nog minder. Dat snelheidsverschil is verwaarloosbaar. Beter zoek je naar de bottlenecks in je script :)

Hint: 'profiler'.
ik snap het niet helamaal hoe dat een lek kan zijn, maar ik zal het aanpassen ;)
Google eens op SQL injection ;)
Test gedaan:
de resultaten zijn:
Alle gegevens in 2 tabellen proppen: 0.395586967468
Alle gegevens in één tabel proppen: 0.302248954773
(dit was volgens mij in microseconden !)
oftewel, als je de gegevens in een tabel propt hoef je er minder uit te halen, en is het sneller ! :)
'Alle' gegevens ? Hoeveel rijen waren dat ?
En test ook eens hoe lang het exact duurt om er rijen uit te halen ? :)

Overigens is het best mogelijk dat alles in één tabel stoppen in dit geval sneller is ja. Wanneer je database groter wordt en je redundantie af moet wegen tegen performance, dan komt dit benchmarken pas echt om de hoek kijken :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan