abonnement Unibet Coolblue Bitvavo
pi_67367863
quote:
Op dinsdag 24 maart 2009 19:10 schreef GlowMouse het volgende:

[..]

Je kunt bijvoorbeeld zeggen: WHERE id = (SELECT max(id) FROM fotoboek_comments WHERE ...)

Flaccid:
1. Domtree of regex, kies maar
2. Wat is per entry? je wilt van élk record 2 velden? Dat is snel maar je moet geen duizenden records hebben.
3. Zoek eens op xmlHttpRequest, er komt wat JavaScript en PHP bij kijken
1. Ik snap even niet.
2. Ja ik kan even niet op die term in een mysql table komen. Gewoon zo'n rij in een mysql table.
3. Ik dacht dat het wel snel te doen was, maar dat valt tegen.
  dinsdag 24 maart 2009 @ 19:59:14 #104
187069 slacker_nl
Sicko pur sang
pi_67368442
quote:
Op dinsdag 24 maart 2009 18:59 schreef GlowMouse het volgende:

[..]

Ziet er leuk uit, maar wekt niet. DISTINCT gaat over een rij.
Hoezo zou het niet werken? Werkt bij mij anders perfect...
quote:
Daar heb ik voor geleerd. Met dit datamodel krijgt hij die query onmogelijk snel tenzij er slechts een beperkt aantal records in de tabel zit.
Knappe studiebol ben je dat je aan de hand van 1 table kan zien hoe zijn datamodel eruit ziet. Jij hebt zeker de glazen bol gejat die iedereen mist (zie OP).
In theory there is no difference between theory and practice. In practice there is.
pi_67368445
ik heb me probleem weten op de lossen met een subquery, volgens mij is die niet optimaal maar dat maakt niet uit.
Het is een script op de website van een studentenvereniging, ik weet 100% zeker dat er slechtere code te vinden is op die site.

bedankt voor de hulp
  dinsdag 24 maart 2009 @ 20:04:19 #106
187069 slacker_nl
Sicko pur sang
pi_67368613
quote:
Op dinsdag 24 maart 2009 19:59 schreef qwox het volgende:
ik heb me probleem weten op de lossen met een subquery, volgens mij is die niet optimaal maar dat maakt niet uit.
Het is een script op de website van een studentenvereniging, ik weet 100% zeker dat er slechtere code te vinden is op die site.

bedankt voor de hulp
Uit nieuwsgierigheid, wat is je query en waar kunnen we het resultaat zien?
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 24 maart 2009 @ 23:48:16 #107
230337 bassiedekloon
allemamaggies
pi_67377722
quote:
Op dinsdag 24 maart 2009 18:44 schreef GlowMouse het volgende:
Kijken wanneer het plaatje voor het laatst is aangepast, en indien lang genog, een ander plaatje tonen?
thanks, je hebt me op een idee gebracht die ook nog werkt..
het is niet super maar werkt wel goed
dit ga ik nog even aan de binnekant van mij ogen bekijken
pi_67382010
quote:
Op dinsdag 24 maart 2009 23:48 schreef bassiedekloon het volgende:

thanks, je hebt me op een idee gebracht die ook nog werkt..
het is niet super maar werkt wel goed
En welk idee is dat?
  woensdag 25 maart 2009 @ 12:36:01 #109
75592 GlowMouse
l'état, c'est moi
pi_67388933
quote:
Op dinsdag 24 maart 2009 19:59 schreef slacker_nl het volgende:

[..]

Hoezo zou het niet werken? Werkt bij mij anders perfect...
http://dev.mysql.com/doc/refman/5.1/en/select.html
En DISTINCT is verder geen bijzondere functie. Ik heb het voor je getest met MySQL 5.0.38 en 5.1.32, maar het werkt gewoon niet.
quote:
Knappe studiebol ben je dat je aan de hand van 1 table kan zien hoe zijn datamodel eruit ziet. Jij hebt zeker de glazen bol gejat die iedereen mist (zie OP).
Daar heb je geen glazen bol voor nodig. Ik zal je de algemene regel schenken: wanneer je wilt sorteren op kolom A en slechts één A wilt bij iedere unieke waarde uit kolom B (met B ongelijk A) dan kan MySQL die query niet efficiënt uitvoeren.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67389286
quote:
Op woensdag 25 maart 2009 12:36 schreef GlowMouse het volgende:
Daar heb je geen glazen bol voor nodig. Ik zal je de algemene regel schenken: wanneer je wilt sorteren op kolom A en slechts één A wilt bij iedere unieke waarde uit kolom B (met B ongelijk A) dan kan MySQL die query niet efficiënt uitvoeren.
Subqueries zie ik ook liever niet, maar die zijn er niet voor niks. Als de functionaliteit van de applicatie iets vereist dat alleen met subqueries op te lossen is, dan kom je er in sommige gevallen niet onderuit.

Maar jij bent d'r zeker zo eentje die zo min mogelijk de DB wilt belasten, maar wel databasezaken op applicatieniveau gaat oplossen. Nee dát is efficiënt.
  woensdag 25 maart 2009 @ 13:01:51 #111
75592 GlowMouse
l'état, c'est moi
pi_67389742
Websites moeten snel zijn omdat dat fijn is voor de gebruikeren omdat je server dan meer bezoekers aan kan. Voor je back-end zijn subqueries minder erg en kunnen ze soms leuke statistieken tevoorschijn toveren.
Per geval kun je nadenken wat je het beste kunt doen. Soms valt de query iets te herschrijven. Hier is dat niet mogelijk, dus zul je het resultaat moeten cachen.
Deze query gaat er bij een wat grotere dataset seconden over doen (benchmark: 60+ seconden bij 30k reacties) en dat is onacceptabel. MySQL kan hem slecht cachen omdat de reactietabel vaak geüpdatet wordt. Dus dan moet je applicatie maar helpen.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67390065
Sorry, maar dat is geen haar beter. Ik vind het altijd lullig om te zien wanneer mensen keurige, semantische websites opzetten (inhoud in de HTML, opmaak in de CSS, unobtrussive Javascript apart, enzovoorts) onder het mom van 'zaken neerleggen waar ze horen', maar vervolgens achteliggende broncode hebben waar je van gaat janken. In de regel vaak hele goede programmeurs die enkel op PHP / ASP gefocused zijn maar geen flauw benul van SQL hebben, of té gemakzuchtig zijn in hun backend.

In bovenstaand voorbeeld verbeter je de performance van een functionaliteit niet, je verlegt de belasting die er door plaats vindt alleen maar, nota bene naar een plek waar het niet eens hoort. Lappen aan SQL scripts in codefiles / codebehinds is een ranzige gewoonte. En dan vooral wanneer er (weer eens) iets in de databasestructuur van de betreffende applicatie moet veranderen, en allerlei vage bestanden met hardcoded queries moet gaan doorzoeken.

Sowieso is je voorbeeld erg overdreven. Op iets eenvoudigs als een reactie-tabel, kun je toch snelle queries draaien waar subqueries in zitten. Sowieso haal je in geval van reacties altijd maar een bepaald aantal op (hee, LIMIT ), en zit er in die reactie-tabel een veld dat verwijst naar de bovenliggende tabel (hee, een INDEX ). Als er honderdduizenden records in die reactie tabel zitten dan zal die ietsjes langzamer zijn dan wanneer er maar 10 records in zitten, maar 60+ seconden? Kom op zeg.

Ik geef je eens een ander voorbeeld. Stel je hebt een webshop met rubrieken. Die rubrieken zijn dusdanig opgezet dat je onbeperkt diep child-rubrieken kunt aanmaken onder bestaande rubrieken. Van elke rubriek wil je het actuele aantal producten in diezelfde rubriek en diens onderliggende rubrieken hebben. Hoe zou jij dat oplossen?

[ Bericht 3% gewijzigd door Tuvai.net op 25-03-2009 13:30:30 ]
pi_67390084
Caching anyone? Ik gebruik regelmatig subqueries, maar dit geldt voor alle soorten queries, etc: het is onzin om ze voor een high traffic app bij iedere request uit te voeren. Het resultaat cachen kan vrijwel altijd.

En voor een low traffic site is het helemaal niet interessant, want dan staat je DB-server ook met zwaarde queries uit zijn neus te vreten.
pi_67390616
quote:
Op woensdag 25 maart 2009 13:01 schreef GlowMouse het volgende:
Websites moeten snel zijn omdat dat fijn is voor de gebruikeren omdat je server dan meer bezoekers aan kan. Voor je back-end zijn subqueries minder erg en kunnen ze soms leuke statistieken tevoorschijn toveren.
Per geval kun je nadenken wat je het beste kunt doen. Soms valt de query iets te herschrijven. Hier is dat niet mogelijk, dus zul je het resultaat moeten cachen.
Deze query gaat er bij een wat grotere dataset seconden over doen (benchmark: 60+ seconden bij 30k reacties) en dat is onacceptabel. MySQL kan hem slecht cachen omdat de reactietabel vaak geüpdatet wordt. Dus dan moet je applicatie maar helpen.
Als je 30k reacties hebt en je query heeft 60+ seconden nodig, dan staan je indices niet goed. Misschien moet je ook de query zelf aanpassen, maar goed geplaatste indices doen heel veel.
  woensdag 25 maart 2009 @ 13:38:03 #115
75592 GlowMouse
l'état, c'est moi
pi_67390901
quote:
Op woensdag 25 maart 2009 13:12 schreef Tuvai.net het volgende:
Sowieso is je voorbeeld erg overdreven. Op iets eenvoudigs als een reactie-tabel, kun je toch snelle queries draaien waar subqueries in zitten. Sowieso haal je in geval van reacties altijd maar een bepaald aantal op (hee, LIMIT ), en zit er in die reactie-tabel een veld dat verwijst naar de bovenliggende tabel (hee, een INDEX ). Als er honderdduizenden records in die reactie tabel zitten dan zal die ietsjes langzamer zijn dan wanneer er maar 10 records in zitten, maar 60+ seconden? Kom op zeg.
Je hebt gelijk, subquery met LIMIT en een tweetal indices doet wonderen hier. Blijft een relatief langzame query, maar het is nu te overzien (paar honderdsten van een seconde, afhankelijk van waar de laatste reacties geplaatst zijn).
quote:
Ik geef je eens een ander voorbeeld. Stel je hebt een webshop met rubrieken. Die rubrieken zijn dusdanig opgezet dat je onbeperkt diep child-rubrieken kunt aanmaken onder bestaande rubrieken. Van elke rubriek wil je het actuele aantal producten in diezelfde rubriek en diens onderliggende rubrieken hebben. Hoe zou jij dat oplossen?
Extra veld in de rubriektabel.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67391270
quote:
Op woensdag 25 maart 2009 13:38 schreef GlowMouse het volgende:
Je hebt gelijk, subquery met LIMIT en een tweetal indices doet wonderen hier. Blijft een relatief langzame query, maar het is nu te overzien (paar honderdsten van een seconde, afhankelijk van waar de laatste reacties geplaatst zijn).
Zo 'relatief' langzaam dat de gebruiker er niks van merkt. Ook in geval van honderdduizenden records niet. Die paar milliseconden op zo veel records zijn verwaarloosbaar, vooral als dat de schaalbaarheid, overzichtelijkheid en flexibiliteit van de broncode ten goede doet.
quote:
Op woensdag 25 maart 2009 13:38 schreef GlowMouse het volgende:
Extra veld in de rubriektabel.
Dus elke keer wanneer een product toegevoegd of verwijdert wordt ga je alle rubrieken (en subrubrieken, en diens subrubrieken, enz) nalopen, het aantal producten in die rubriek (en subrubrieken, en diens subrubrieken) met een COUNT(*) ophalen en die waarde wegschrijven? Waar leg je die functionaliteit en hoe doe je dat dan?

Een mogelijke situatie:
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
- A
- - A A
- - - A A A
- - - A A B
- - - A A C
- - A B
- - - A B A
- - - A B B
- - - A B C
- - A C
- - - A C A
- - - A C B
- - - A C C
- - A D
- - - A D A
- - - A D B
- - - A D C
- - A E
- - - A E A
- - - A E B
- - - A E C
- - A F
- - - A G A
- - - A G B
- - - A G C


Stel je verwijdert een product in rubriek '- - - A E C', dan zal het productaantal van rubriek '- A' ook actueel moeten worden. Erg veel COUNT(*) query`tjes zeg.

Wat doe je overigens als een DBA in 'geval van nood' een product via de database moet verwijderen of 'recoveren'?
pi_67391661
Vraagje, hoe kan ik binnen een grote tekst binnen bepaalde elementen iets wijzigen?

stel ik heb de volgende tekst

<table>
<tr>
<td>{=test}</td>
<td>{te=st}</td>
<td>{test=}</td>
</tr>

Nu wil ik deze data alles tussen de {} filteren en de = verwijderen... hoe kan ik dit doen?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_67391828
Regex om de inhoud van alle {} te vinden en daar vervolgens je filter op loslaten
pi_67392090
Tja dat kan ook, maar hoopte eingelijk op een simpele preg_replace.

Leek mij namelijk sneller.

Het filteren van alle {*} is idd wel te doen maar nogmaals had liever een preg_replace die het allemaal in 1x deed
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 25 maart 2009 @ 14:24:20 #120
187069 slacker_nl
Sicko pur sang
pi_67392522
Beetje simpele variant, kan volgens mij wel mooier:


1
2
3
4
5
6
7
8
9
<?php
$lines 
= array("<td>{=test}</td>""<td>{te=st}</td>""<td>{test=}</td>");

$regexp '/(\{)(\w+)?=?(\w+)?(\})/';

foreach (
$lines as $v) {
    print 
preg_replace($regexp'\1\2\3\4'$v);
}
?>


[ Bericht 0% gewijzigd door slacker_nl op 25-03-2009 14:36:59 ]
In theory there is no difference between theory and practice. In practice there is.
  woensdag 25 maart 2009 @ 17:47:49 #121
75592 GlowMouse
l'état, c'est moi
pi_67400457
quote:
Op woensdag 25 maart 2009 13:48 schreef Tuvai.net het volgende:
Stel je verwijdert een product in rubriek '- - - A E C', dan zal het productaantal van rubriek '- A' ook actueel moeten worden. Erg veel COUNT(*) query`tjes zeg.
Beter bij het updaten dan bij het opvragen. Bij een webwinkel gebeurt dat laatste veel vaker. En als je voor je site die getallen veel nodig hebt, dan ga je denormaliseren. Gebeurt ook veel in fora, bijvoorbeeld de berichtenteller, zie phpbb, zie vbulletin, zie myreact.
quote:
Wat doe je overigens als een DBA in 'geval van nood' een product via de database moet verwijderen of 'recoveren'?
Dan bouw je een knop in waarmee alle tellers opnieuw berekend worden.
Mooie code is niet altijd het criterium.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_67402076
quote:
Op woensdag 25 maart 2009 17:47 schreef GlowMouse het volgende:
Mooie code is niet altijd het criterium.
Nee, maar jouw methode houdt wel in dat je op gigantisch veel plekken in je applicatie herhaaldelijke en overbodige code gaat neer plempen. Je hebt producten die besteld worden (en dus in aantal krimpen), beheermodules waar producten toegevoegd en verwijderd kunnen worden, en tig andere situaties die de aantallen in kwestie beïnvloeden en waar jij dus in je broncode stukjes voor moet gaan plaatsen om die aantallen bij te houden. Nog even afgezien van het feit dat DBA`ers 'in geval van nood' (recovery) of uit pure gemakszucht ook nog wel eens zo je database in gaan om e.e.a. aan te passen, buiten de applicatie om. Ja, je kunt een knopje maken waarmee je wederom wéér letterlijk alles na moet gaan lopen (dus ook de rubrieken die niet ter sprake zijn) en berekenen, maar da's ook niet echt lekker voor daadwerkelijk actuele cijfers (want hoe vaak moet jij deze zware functie niet gaan uitvoeren om je cijfers daadwerlelijk actueel te houden? ) en de databaseperformance die jij zo belangrijk vindt.

Dan doe mij maar de berekening bij het opvragen. Dan leg je die (recursieve) functie in de database neer en hoef je dat aantal enkel uit te lezen en weer te geven in je code. Het hele gebeuren staat op één plek, is in geval van wijzigingen in de databasestructuur eenvoudig en snel aan te passen en is altijd, hoe dan ook, actueel. Het betreft eenvoudige COUNT()s, dus waar hébben we het over qua performanceverlies indien dit bij het opvragen gebeurt?

Database-optimalisatie vind ik net zoals jezelf heel belangrijk, maar gigantisch omslachtige en misplaatste methodes gaan toepassen voor een verwaarloosbaar stukje performancewinst van een paar milliseconden, is maar mijn mening gewoon debiel. Heeft wat mij betreft iets weg van fetisjisme ("Databaseperformance hoog in het vaandel houden, de rest kan wat mij betreft stikken!").

[ Bericht 0% gewijzigd door Tuvai.net op 25-03-2009 18:41:10 ]
  woensdag 25 maart 2009 @ 18:50:33 #123
56176 Catch22-
Ben je Blind?!
pi_67402588
je zit er wel mee dat in een grote site/webshop je niet meer zit met een tabel producten en een tabel categorieen.

We zijn op het werk met een shop bezig, maar je kan echt niet zomaar 100 counts per request gaan doen, dan komt het niet goed (en helemaal niet als je naar schaalbaarheid kijkt)
Heel veel groetjes, Catch22
En zoals mijn opa zei: "Al is het meisje nog zo mooi, haar poep stinkt ook". Rust Zacht opa..
Met GHB nooit meer nee
Storneren een optie?
pi_67405994
hallo ik krijg iets niet voor elkaar..

ik wil namelijk $_GET['room'] ipv van de 101 hebben in het volgende stukje
1
2
3
<?php
$fp 
fopen ("online/room101.txt","r+");
?>

alleen als ik dat doe krijg ik steeds een foutmelding.
weet iemand hoe dat moet?
dit ga ik nog even aan de binnekant van mij ogen bekijken
pi_67406284
Post de code eens die de fout geeft zou ik zeggen
pi_67406638
ik krijg deze foutmelding

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/home/XXXX/domains/XXXX.nl/public_html/online.php on line 21

bij deze code:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>online</title>
<META HTTP-EQUIV="refresh" CONTENT="5">
</head>

<body>

<?
//simple user's online script

   $ip = $_SERVER['REMOTE_ADDR'];
   $time = time();
   $cutoff = 15; //online cut of time
   $exists = 0;
   $users = 0;
   $user  = "";

      $fp = fopen ("online/room$_GET['room'].txt","r+"); //if the file exists open it


      while (!feof($fp))
      {
      $user[] = chop(fgets($fp,65536));
      }
      fseek($fp,0,SEEK_SET);


      foreach ($user as $line)
      {
      list($oldip,$oldtime) = explode('|',$line);
      if ($oldip == $ip) {$oldtime = $time;$exists = 1;} //check to see if the user is already in the text file
      if ($time < $oldtime + ($cutoff * 60)) //see if the last time the user visited is past the cut off time
      {
      fputs($fp,"$oldip|$oldtime\n"); //write the old data to the text file
      $users = $users + 1; // add one to the user count
      }
      }


      if ($exists == 0) //if the user isn't in the text file already:
      {
      fputs($fp,"$ip|$time\n"); //write the new data to the text file
      $users = $users + 1; //add one to the user count
      }


      fclose ($fp); //close the text file
      print "$users"; //display the number of users online

?>

</body>
</html>


ik wil het dus zo hebben http://domein.nl/online.php?room=101
zodat ik niet voor elke room een nieuwe online.php hoef te maken
dit ga ik nog even aan de binnekant van mij ogen bekijken
pi_67407031
quote:
Op woensdag 25 maart 2009 08:30 schreef Roy_T het volgende:

[..]

En welk idee is dat?

poeh hé hoe ga ik dat uitleggen (niet mijn sterkste eigenschap )

Ik heb een "hoeveel mensen zijn online script" en die schrijft om de zoveel sec in een text file als iemand de chat pagina open heeft die de inframe van de chat bevat.
En het script kijkt dan wanner die voor het laatst is aangepast.
het is iets langzamer, maar het werkt wel goed
dit ga ik nog even aan de binnekant van mij ogen bekijken
pi_67407074
Je code is zo insecure als de pest, maar { en } om $_GET['room'] lost het op
pi_67407379
quote:
Op woensdag 25 maart 2009 20:46 schreef Roy_T het volgende:
Je code is zo insecure als de pest, maar { en } om $_GET['room'] lost het op
YES het werkt
Thnx voor de snelle reactie, maar hoe bedoel je insecure?
Ik hoef daar toch alleen rekening mee te houden als ik een database gebruik?
Die gebruik ik nog niet omdat ik nog niet weet hoe.
dit ga ik nog even aan de binnekant van mij ogen bekijken
pi_67408629
quote:
Op woensdag 25 maart 2009 20:53 schreef bassiedekloon het volgende:

[..]

YES het werkt
Thnx voor de snelle reactie, maar hoe bedoel je insecure?
Ik hoef daar toch alleen rekening mee te houden als ik een database gebruik?
Die gebruik ik nog niet omdat ik nog niet weet hoe.
Het is in principe mogelijk met dat script iedere willekeurige tekstfile te lezen. (Het besturingssysteem kan nog wel beperkingen opleggen, maar iemand anders kan die rechten ook weer aanpassen. Daar moet je dus niet op vertrouwen.)
Daarbij heb je een gegarandeerde runtime error als het tekstbestand niet bestaat.
  woensdag 25 maart 2009 @ 22:02:24 #131
56176 Catch22-
Ben je Blind?!
pi_67410269
eerst ff een file_exists op de gevraagde filename doen dus
Heel veel groetjes, Catch22
En zoals mijn opa zei: "Al is het meisje nog zo mooi, haar poep stinkt ook". Rust Zacht opa..
Met GHB nooit meer nee
Storneren een optie?
pi_67410542
quote:
Op woensdag 25 maart 2009 22:02 schreef Catch22- het volgende:
eerst ff een file_exists op de gevraagde filename doen dus
Kan. Maar fopen() geeft ook gewoon false terug als het bestand niet bestaat.
pi_67410805
quote:
Op woensdag 25 maart 2009 22:07 schreef Light het volgende:

[..]

Kan. Maar fopen() geeft ook gewoon false terug als het bestand niet bestaat.
@ voor de functie aanroep,niet echt een nette oplossing,maar het kan...
als het inderdaad een False terug geeft (niet gecontroleerd) kun je ook iets doen als
1
2
if(fopen($file))
{ spul }

maar veiligheid blijft dan nog steeds een probleempje.
Vooral dat wat hier boven staat.
  woensdag 25 maart 2009 @ 22:12:59 #134
56176 Catch22-
Ben je Blind?!
pi_67410808
ja dat klopt, maar dan ziet je gebruikt gewoon niets. dus ik zou het ff afvangen, kan je evt een foutmelding ook terugkoppelen

of een fallback openen
Heel veel groetjes, Catch22
En zoals mijn opa zei: "Al is het meisje nog zo mooi, haar poep stinkt ook". Rust Zacht opa..
Met GHB nooit meer nee
Storneren een optie?
pi_67418772
quote:
Op woensdag 25 maart 2009 14:24 schreef slacker_nl het volgende:
Beetje simpele variant, kan volgens mij wel mooier:
[ code verwijderd ]
Ik zal deze vandaag eens testen ziet er best handig uit!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_67421772
quote:
Op dinsdag 24 maart 2009 16:22 schreef Tuvai.net het volgende:
Voorbeeldje om namen op te halen van mensen die gespecialiseerd zijn in OperatingSystem Windows:
[ code verwijderd ]

OF
[ code verwijderd ]

Kort samengevat: Met een LEFT OUTER JOIN ga je vanuit de 'diepere' tabel werken, met RIGHT OUTER JOIN ga je vanuit de bovenliggende tabel werken. Voor de rest is het in jouw geval simpelweg met de WHERE clausule spelen om de goede filtering toe te passen.
Ok, cool, werkt goed, maar nu wil ik mijn zoekopdracht meer specificeren, dus: mensen die gespecialiseerd zijn in operating system windows of mac en in programming language PHP of ASP.

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    w.name
FROM
    werknemer w RIGHT OUTER JOIN
        specialiteiten s ON s.werknemer_id = w.id
WHERE
    s.specialiteit_naam = 'OperatingSystems' AND
    s.waarde IN ('MAC', 'Windows')
    AND
    s.specialiteit_naam = 'ProgrammingLanguage' AND
    s.waarde IN ('PHP', 'ASP')
;


Hoe doe ik dat dan?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_67422450
quote:
Op donderdag 26 maart 2009 10:27 schreef markiemark het volgende:

[..]

Ok, cool, werkt goed, maar nu wil ik mijn zoekopdracht meer specificeren, dus: mensen die gespecialiseerd zijn in operating system windows of mac en in programming language PHP of ASP.
[ code verwijderd ]

Hoe doe ik dat dan?
Dan zul je toch e.e.a. met de WHERE clausule moeten goochelen, je statements met AND / OR aanvullen en eventueel in aparte 'blokjes' zetten, voorbeeld:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
    w.name
FROM
    werknemer w RIGHT OUTER JOIN
        specialiteiten s ON s.werknemer_id = w.id
WHERE
    (
        s.specialiteit_naam = 'OperatingSystems' AND
        (
            s.waarde = 'MAC' OR s.waarde = 'Windows'
        )
    )
    AND
    (
        s.specialiteit_naam = 'ProgrammingLanguage' AND
        (
            s.waarde = 'PHP' OR s.waarde = 'ASP'
        )
    )
pi_67423207
quote:
Op donderdag 26 maart 2009 10:52 schreef Tuvai.net het volgende:

[..]

Dan zul je toch e.e.a. met de WHERE clausule moeten goochelen, je statements met AND / OR aanvullen en eventueel in aparte 'blokjes' zetten, voorbeeld:
[ code verwijderd ]

Nope helaas.. 0 results returned..


Zo doet ie het wel, maar weer de kwestie dat ik meer wil specificeren.. (Programming Lanugage.. )
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    w.name
FROM
    werknemer w RIGHT OUTER JOIN
        specialiteiten s ON s.werknemer_id = w.id
WHERE
    (
        s.specialiteit_naam = 'OperatingSystems' AND
        (
            s.waarde = 'MAC' OR s.waarde = 'Windows'
        )
    )
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_67423447
EDIT: Ah klopt, ik had er even geen rekening mee gehouden dat het over een one-to-many tabel ging. Je selecteert in dit geval immers elke keer een losse 'specialiteiten' record. Je zult vrees ik toch e.e.a. met subqueries moeten doen.
pi_67423641
quote:
Op donderdag 26 maart 2009 11:27 schreef Tuvai.net het volgende:
EDIT: Ah klopt, ik had er even geen rekening mee gehouden dat het over een one-to-many tabel ging. Je selecteert in dit geval immers elke keer een losse 'specialiteiten' record. Je zult vrees ik toch e.e.a. met subqueries moeten doen.
Kun je een tipje van de sluier oplichten wat betreft subqueries?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_67424017
Iets in de trant van:

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
    w.naam
FROM
    werknemer w
WHERE
    (
        SELECT
            COUNT(*)
        FROM
            specialiteiten s
        WHERE
            s.werknemer_id = w.id AND
            s.specialiteit_naam = 'OperatingSystems' AND
            s.waarde IN ('MAC', 'Windows')
    ) > 0 AND
    (
        SELECT
            COUNT(*)
        FROM
            specialiteiten s
        WHERE
            s.werknemer_id = w.id AND
            s.specialiteit_naam = 'ProgrammingLanguages' AND
            s.waarde IN ('PHP', 'ASP')
    ) > 0


Niet de mooitste query, maar ik kan op dit moment even niets beters verzinnen.
pi_67425050
Die kan je ook samenvoegen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    w.naam
FROM
    werknemer w
WHERE
    (
        SELECT COUNT(*)
        FROM
            specialiteiten s
        WHERE
            s.werknemer_id = w.id 
            AND 
            ( 
               (s.specialiteit_naam = 'OperatingSystems' AND s.waarde IN ('MAC', 'Windows'))
               OR (s.specialiteit_naam = 'ProgrammingLanguages' AND s.waarde IN ('PHP', 'ASP'))
            )
    ) = 2
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_67425787
Ik heb waarschijnlijk een hele domme vraag, maar ben nu al een poosje op zoek en weet niet hoe ik t kan oplossen.

Maar ik heb een contact formulier op mn site geplaatst, welke dan netjes een mailtje naar mij stuurt. Als ik op verzenden klik opent die een nieuw leeg scherm. Terwijl ik eigenlijk wil dat die de pagina vervangt door de pagina waarop ik ze bedankt voor het invullen. Hier de codes van mn site en de PHP file:


HTML
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
<?php
<FORM METHOD="post" ACTION="mail.php">

<
INPUT TYPE="hidden" NAME="to" VALUE="naam@domein.com">
<
p>
<
INPUT TYPE="hidden" NAME="subject" VALUE="Voorbeeldformulier Handleiding HTML">
<
strong>Naam*:</strong>
<
br><INPUT NAME="name" SIZE="45">
<
br><strong>E-mail adres*:</strong>
<
br><INPUT NAME="email" SIZE="45">
<
br><strong>Telefoonnummer*:</strong>
<
br><INPUT NAME="phone" SIZE="45">
<
br><strong>Bericht/vraag:</strong>
<
br><INPUT TYPE="hidden" NAME="required_fields" VALUE="name, from, phone">

<
TEXTAREA NAME="message" ROWS="3" COLS="45"></TEXTAREA>
<
br> <img class="rde_img_smiley" src="http://i.fok.nl/s/shiny.gif" width="15" height="15" alt="" /> svp invullen
<br><br>
<
INPUT TYPE="reset" VALUE="Verwijder invoer">

<
INPUT TYPE="submit" VALUE="Verzend gegevens">
</
p>

</
FORM>
?>


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$name
=$_POST['name'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$message=$_POST['message'];

$ToEmail "naam@domein.com";
$ToSubject "Contact Form from domein.com";

$EmailBody =   "Name: $name\n 
Email: $email\n
Phone: $phone\n
Message: $message\n"
;

$Message $EmailBody;


$headers .= "Content-type: text; charset=iso-8859-1\r\n";
$headers .= "From:".$email."\r\n";

mail($ToEmail,$ToSubject,$Message$headers);

header"Location: contact2.html" );
?>


Misschien dat iemand mij kan vertellen wat ik fout heb gedaan, of dat ik een compleet verkeerde manier gebruikt heb.

Ze staan beide gewoon op de server, het contact formulier opzich werkt.
"Do me a favor, try not to think, you're going to hurt yourself"
"You go to heaven for the climate and hell for the company"
pi_67426393
header( "Location: contact2.html" ); geeft aan waar je heen wilt gaan nadat de mail gestuurd is.
pi_67426772
klopt, maar dat gebeurt dus niet

edit - sorry, het werkt wel, blijkbaar had ik nog niet de laatste versie ge-upload
"Do me a favor, try not to think, you're going to hurt yourself"
"You go to heaven for the climate and hell for the company"
pi_67426929
quote:
Op donderdag 26 maart 2009 12:13 schreef SuperRembo het volgende:
Die kan je ook samenvoegen:
[ code verwijderd ]


EDIT: snap hem al...
Maar, query duurt ontzettend lang... Lijkt wel of ie in oneindige loop zit..


[ Bericht 36% gewijzigd door markiemark op 26-03-2009 13:17:58 ]
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_67427689
quote:
Op donderdag 26 maart 2009 13:05 schreef markiemark het volgende:

[..]

Kan ik daar ook dit van maken?
[ code verwijderd ]

* AND ipv OR
Ik denk dat er niet veel regels zijn waarbij specialiteit_naam = 'OperatingSystems' en specialiteit_naam = 'ProgrammingLanguages' is.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_67427738
quote:
Op donderdag 26 maart 2009 13:26 schreef SuperRembo het volgende:

[..]

Ik denk dat er niet veel regels zijn waarbij specialiteit_naam = 'OperatingSystems' en specialiteit_naam = 'ProgrammingLanguages' is.
Hehe nee ik snap hem al..
Je geeft denk ik een goede oplossing voor mij, maar mijn mysql server lijkt het niet te slikken...
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_67428173
quote:
Op donderdag 26 maart 2009 13:27 schreef markiemark het volgende:

[..]

Hehe nee ik snap hem al..
Je geeft denk ik een goede oplossing voor mij, maar mijn mysql server lijkt het niet te slikken...
Ik heb hem gelimit op 5, en dat duurt 6 seconden... Hoe kan dat?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
pi_67431656
explain <yoursqlcode> en dan kijken wat de uitvoer is
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_67433128
Ik heb ook eens een vraag *O*

Ik heb een functie om een watermark aan een plaatje toe te voegen. Dat werkt op zich prima, alleen zou ik de opacity van de watermark makkelijk willen kunnen aanpassen.
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
26
<?php
function addWatermark($image$opacity)
{
   if (!
imageistruecolor($image)) die('addWatermark: Input image should be true color.');
   
   
// Load watermark image
   
$wmFileName 'images/watermark.png';
   
$wm imagecreatefrompng($wmFileName);  
   if (!
$wm) die('Watermark image not found. '.$wmFileName);
   if (!
imageistruecolor($wm)) die('addWatermark: Watermark image should be true color.');

   
$wmWidth imagesx($wm);  
   
$wmHeight imagesy($wm);  

   
// Lower right corner, with padding
   
$destX imagesx($image) - $wmWidth 5;  
   
$destY imagesy($image) - $wmHeight 5;  

   
// Copy watermark to image
   
imagecopymerge($image$wm$destX$destY00$wmWidth$wmHeight$opacity);  
   
//imagecopy($image, $wm, $destX, $destY, 0, 0, $wmWidth, $wmHeight);  
   
   // Clean up
   
imagedestroy($wm);  
}
?>


Het probleem is dat imagecopymerge alle transparatie uit het watermark plaatje zelf weggooit :{. Met imagecopy blijft die informatie wel behouden, maar dan kan ik er dus niets aan tweaken via php.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  donderdag 26 maart 2009 @ 16:20:35 #152
56176 Catch22-
Ben je Blind?!
pi_67434243
ik zou even een kant en klaar scriptje zoeken, die image classes zijn echt brak vaak.
Heel veel groetjes, Catch22
En zoals mijn opa zei: "Al is het meisje nog zo mooi, haar poep stinkt ook". Rust Zacht opa..
Met GHB nooit meer nee
Storneren een optie?
pi_67434266
quote:
Op donderdag 26 maart 2009 15:50 schreef SuperRembo het volgende:
Ik heb ook eens een vraag

Ik heb een functie om een watermark aan een plaatje toe te voegen. Dat werkt op zich prima, alleen zou ik de opacity van de watermark makkelijk willen kunnen aanpassen.
[ code verwijderd ]

Het probleem is dat imagecopymerge alle transparatie uit het watermark plaatje zelf weggooit . Met imagecopy blijft die informatie wel behouden, maar dan kan ik er dus niets aan tweaken via php.
imagecopymerge verneukt inderdaad al de 'bestaande' transparency in een PNG. Met http://nl2.php.net/manual/en/function.imagecopyresampled.php imagecopy schijnt het met wat omweggetjes mogelijk te zijn wat jij wil. Ik heb het zelf eerlijk gezegd ook nog nooit geprobeerd daar ik deze situatie nog nooit ben tegengekomen, maar als ik de reacties op beide pagina's lees is het wel degelijk mogelijk.

[ Bericht 5% gewijzigd door Tuvai.net op 26-03-2009 23:14:34 ]
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')