[php/mysql]manier Records selecteren om load te verminderen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    
    <?php   
    
      echo "<table width='100%' cellpadding='5' cellspacing='2'>";
      echo "<tr><td ><b>Team</b></td><td width='60px'><b>Datum</b></td><td width='40px' align='center'><b>Uur</b></td><td width='100px'><b>Thuis</b></td><td width='100px'><b>Gast</b></td><td align='center'><b>Score - Score</b></td></tr>";
    
    $result = mysql_query("SELECT * FROM tblKalender where datum order by teamId asc");
    while($row = mysql_fetch_array($result))
      {

        $result1 = mysql_query("SELECT * FROM tblTeams where id = $row[teamId]");
        while($row1 = mysql_fetch_array($result1))
        {
              if (date("W", strtotime($row['datum'])) == date('W'))
              {
              echo "<tr><td width='80px'><b>".$row1['team']."</b></td><td width='60px'>".$row['datum']."</td><td width='40px' align='center'>".$row['uur']."</td><td width='100px'>".$row['home']."</td><td width='100px'>".$row['guest']."</td><td align='center'>".$row['scoreHome']." - ".$row['scoreHome']."</td></tr>";
              }
         }   
       

      }
      echo "</table>";
      ?>


Nu heb ik met deze code alle datums laten selecteren die dezelfde weeknummer hebben als in de database.
Nu is men vraag, is dit niet te omslachtig om al die records af te lopen en ze dan met een if te lateren selecteren. Het werkt heel goed eigenlijk, maar ik vraag me af of ik mijn database load niet kan laten verlichten door het week getal te zoeken in mijn sql regel? Ik ben geen pro dus ik heb het voorlopig zo opgelost. Maar als er slimmere mensen zijn die willen helpen mag dit altijd :)

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Het snelst lijkt het me om de begin- en einddatum van de week die je zoekt in twee variabelen te zetten en dan in je query zo te doen:
code:
1
2
3
4
SELECT k.datum, t.* FROM tblKalender k
INNER JOIN tblTeams t ON t.id = k.teamId
WHERE k.datum BETWEEN $begin AND $eind
ORDER BY k.datum, t.id


Dan krijg je dus meteen de reaultaten die je zoekt, namelijk alle teams (met info) die spelen in de geselecteerde week. Je hoeft dus geen extra query meer te doen voor de teaminformatie, doe maar eens print_r($row) op de resultaten van deze query.

Voor meer info over vergelijkingsoperatoren in MySQL, kijk hier.

[ Voor 44% gewijzigd door Gerco op 05-09-2006 14:08 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben aan het proberen, momenteel geeft hij niks terug, maar kga eerst eens alles uitpluizen voor te zeggen dat het niet werkt aangezien ik deze manier niet gewoon ben. Zou me in principe veel code besparen waar ik er nu overdreven heb.

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Verwijderd schreef op dinsdag 05 september 2006 @ 14:21:
Ik ben aan het proberen, momenteel geeft hij niks terug.
Misschien heb je je datums in het verkeerde formaat staan? vziw verwacht MySQL ze in yyyy-mm-dd formaat. print() anders je query eens uit en kijk of daarin staat wat je verwacht te zien. Zorg ook dat er data aanwezig is die terug zou moeten komen, daar heb ik meer mensen zich in zien vergissen :)

[ Voor 5% gewijzigd door Gerco op 05-09-2006 14:27 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 09:16

Boss

+1 Overgewaardeerd

Kent MySQL geen functie om een datum zo te formatteren dat je het weeknummer uit kan halen? Dan kan je het juiste filter meegeven in je query en heb je een stuk minder load.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
@Gerco: Is het niet makkelijker om "Where WEEK(k.datum) = 36" te doen? (Evt. een "And year = 2006" erbij :Y) )

[ Voor 47% gewijzigd door RobIII op 05-09-2006 14:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

RobIII schreef op dinsdag 05 september 2006 @ 14:28:
@Gerco: Is het niet makkelijker om "Where WEEK(k.datum) = 36" te doen?
Ongetwijfeld, maar dan moet je natuurlijk wel weten dat de WEEK functie bestaat :) Ik gebruik bijna nooit meer MySQL, dus daar zou het aan kunnen liggen. Houd die functie trouwens ook rekening met de 1001 verschillende manieren om weken te benoemen?

Beginnen op zon- of maandag, wanneer wel/niet een 53e week etc

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gerco schreef op dinsdag 05 september 2006 @ 14:31:
[...]

Ongetwijfeld, maar dan moet je natuurlijk wel weten dat de WEEK functie bestaat :) Ik gebruik bijna nooit meer MySQL, dus daar zou het aan kunnen liggen.
Bij mijn weten ondersteunen de meeste DB's wel een Week functie ;)
Gerco schreef op dinsdag 05 september 2006 @ 14:31:
Houd die functie trouwens ook rekening met de 1001 verschillende manieren om weken te benoemen?
Ik heb er niet voor niks een linkje van gemaakt in die post ;) Je kunt dus inderdaad een "mode" parameter meegeven.

Overigens zou ik eerst het year criterium doen en dan pas het week criterium. Staat netter in je Query en ik heb geen idee of MySQL dan wat "sneller/beter" zoekt (scheelt weer weeknummer uitrekenen als 'ie het kan short-circuiten :Y) ).

[ Voor 40% gewijzigd door RobIII op 05-09-2006 14:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

RobIII schreef op dinsdag 05 september 2006 @ 14:33:
Bij mijn weten ondersteunen de meeste DB's wel een Week functie ;)
Gelukkig werk ik ook al een tijdje niet meer met andere DBs. Tenzij je Progress meetelt, maar dat is niet zomaar een DB, eerder een programmeer omgeving met geintegreerde db (of andersom).
Ik heb er niet voor niks een linkje van gemaakt in die post ;) Je kunt dus inderdaad een "mode" parameter meegeven.
Ok, point taken.
Overigens zou ik eerst het year criterium doen en dan pas het week criterium. Staat netter in je Query en ik heb geen idee of MySQL dan wat "sneller/beter" zoekt.
Ik hoop dat het zoekgedrag dan niet veranderd, anders zou de query optimizer van MySQL wel aardig ruk zijn.

[ Voor 18% gewijzigd door Gerco op 05-09-2006 14:38 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gerco schreef op dinsdag 05 september 2006 @ 14:36:
Ik hoop dat het zoekgedrag dan niet veranderd, anders zou de query optimizer van MySQL wel bijzonder ruk zijn.
Ik doe (ook) niet veel met MySQL, ik werk doorgaans op MSSQL. En ik moet bekennen dat mijn dunk van MySQL niet al te hoog is (maar dat zijn voornamelijk vooroordelen door (erg) oude MySQL versies die nooit meer zijn weggegaan :+ ). Het zou dus idd als het goed is geen verschil mogen uitmaken...maar toch... Just to be sure ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    <?php   
    
      echo "<table width='100%' cellpadding='5' cellspacing='2'>";
      echo "<tr><td ><b>Team</b></td><td width='60px'><b>Datum</b></td><td width='40px' align='center'><b>Uur</b></td><td width='100px'><b>Thuis</b></td><td width='100px'><b>Gast</b></td><td align='center'><b>Score - Score</b></td></tr>";
    $weekGetal = date('W');
    $ditJaar = date('Y');
    $result = mysql_query("SELECT k.datum,k.*, t.* FROM tblKalender k INNER JOIN tblTeams t ON t.id = k.teamId Where YEAR(k.datum) = $ditJaar AND WEEK(k.datum) = $weekGetal   ORDER BY k.datum, t.id");
    while($row = mysql_fetch_array($result))
      {
      echo "<tr><td width='80px'><b>".$row['team']."</b></td><td width='60px'>".$row['datum']."</td><td width='40px' align='center'>".$row['uur']."</td><td width='100px'>".$row['home']."</td><td width='100px'>".$row['guest']."</td><td align='center'>".$row['scoreHome']." - ".$row['scoreHome']."</td></tr>";
              
       

      }
      echo "</table>";
      ?>


Ok, ik heb dit nu zo aangepast :) dankuwel voor die hulp, maar nu zit ik met het volgend probleem dat ik maar 1 record krijg terwijl ik er in de praktijk volgens mijn stukje omslachtige code er 3 moet krijgen. (het zijn er degelijk 3 ook als ik in de database kijk)

mijn output nu is
Senioren 2 2006-09-09 18:15 HANDZAME B KOKSIJDE B 0 - 0

en mijn code output =
Seniores 1 2006-09-10 14:30 BBC Koksijde DB Willebroek A 0 - 0
Senioren 1 2006-09-10 16:30 KOKSIJDE A TIELT A 0 - 0
Senioren 2 2006-09-09 18:15 HANDZAME B KOKSIJDE B 0 - 0


ik zal wsslijk zelf iets doms doen, maar zie het niet echt.

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Verwijderd schreef op dinsdag 05 september 2006 @ 15:06:
ik zal wsslijk zelf iets doms doen, maar zie het niet echt.
Waarschijnlijk heeft dit te maken met de 'mode' parameter van de WEEK() functie. Die zal nu wel menen dat 10-9 in een andere week ligt dan 9-9. Aangezien 10-9 op een zondag valt, lijkt me dat volkomen logisch. Stel de 'mode' dus zo in dat hij de maandag als begin van de nieuwe week ziet en je probleem is voorbij, zie hiervoor het linkje van RobIII.

De PHP weeknummer functie zal waarschijnlijk standaard maandag als eerste dag hebben en daardoor ging het voorheen wel 'goed'.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok u hebt gelijk

DAYOFWEEK()
Number of the day of the week (1=Sunday, 7=Saturday)

maar hoe ik dat juistzet? Dit heb ik niet gevonden op dat linkje.
http://www.devshed.com/c/...Time-and-Other-Functions/
Nuja, effe verderzoeken.

ik heb het gevonden.
Als je mysql versies gebruikt na 4.1 gebruik je best deze functie: WEEKOFYEAR()

dan komt het wel goed :)

[ Voor 18% gewijzigd door Verwijderd op 05-09-2006 15:31 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 05 september 2006 @ 15:29:
ok u hebt gelijk

DAYOFWEEK()
Number of the day of the week (1=Sunday, 7=Saturday)

maar hoe ik dat juistzet? Dit heb ik niet gevonden op dat linkje.
http://www.devshed.com/c/...Time-and-Other-Functions/
Nuja, effe verderzoeken.
Je moet niet kijken naar DayOfWeek (die geeft een dagnummer terug voor een gegeven datum), maar naar het mode argument van de WEEK functie.
ModeFirst day of weekRangeWeek 1 is the first week...
0Sunday0-53with a Sunday in this year
1Monday0-53with more than 3 days this year
2Sunday1-53with a Sunday in this year
3Monday1-53with more than 3 days this year
4Sunday0-53with more than 3 days this year
5Monday0-53with a Monday in this year
6Sunday1-53with more than 3 days this year
7Monday1-53with a Monday in this year

[ Voor 47% gewijzigd door RobIII op 05-09-2006 15:34 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb het gevonden.
Als je mysql versies gebruikt na 4.1 gebruik je best deze functie: WEEKOFYEAR()

dan komt het wel goed, ik had 10 seconden op submit geklikt voor ik dat zag staan :) en jou reply was er precies al :)

[ Voor 27% gewijzigd door Verwijderd op 05-09-2006 15:32 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 05 september 2006 @ 15:31:
ik heb het gevonden.
Als je mysql versies gebruikt na 4.1 gebruik je best deze functie: WEEKOFYEAR()
Dat kan ook maar die heeft geen mode argument ;)
Eigenwijs :>

[ Voor 20% gewijzigd door RobIII op 05-09-2006 15:37 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Anyway thx aan jullie 2 om mij te helpen ook al mag dat niet van de policy zeker?

Ik ga me eens verdiepen op die manier van sql want het lijkt me veel werk te besparen.

Mssql wou ik altijd al gebruiken. Maarja, het is te kostelijk voor mij. Mysql is gratis en van ms access/asp stap ik af want dat slaat constant vast als ik teveel gebruikers heb. Ik weet dat je asp met mysql kan gebruiken, maar dit lijkt me stom. En je krijgt meer help als je php/mysql samen gebruikt zoals het hoort.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 05 september 2006 @ 15:41:
Anyway thx aan jullie 2 om mij te helpen ook al mag dat niet van de policy zeker?
:? Waarom zouden wij je niet mogen helpen van de policy?
Verwijderd schreef op dinsdag 05 september 2006 @ 15:41:
Ik ga me eens verdiepen op die manier van sql want het lijkt me veel werk te besparen.
:? Die manier? Het is gewoon een functie hoor?
Verwijderd schreef op dinsdag 05 september 2006 @ 15:41:
Mssql wou ik altijd al gebruiken. Maarja, het is te kostelijk voor mij. Mysql is gratis en van ms access/asp stap ik af want dat slaat constant vast als ik teveel gebruikers heb. Ik weet dat je asp met mysql kan gebruiken, maar dit lijkt me stom. En je krijgt meer help als je php/mysql samen gebruikt zoals het hoort.
:? Niemand zegt toch dat je een andere DB moet gebruiken? Wat je wil kan prima met MySQL (ik heb potdikke 40 keer naar een MySQL site gelinked :? ). En ja, je kunt met ASP ook MySQL gebruiken (of MSSQL, Access, ... zo'n beetje ieder DBMS) maar dat geldt ook voor PHP. Ik zie niet waarom je nu opeens zoiets post :? Ik kan er geen touw meer aan vastknopen.

Anyhow, je bent geholpen, het is je voorgekauwd en je moet er zo verder wel uit kunnen komen. Uiteraard ben je welkom om vragen te stellen hier, maar doe voortaan wel een beetje beter je best qua "(onder)zoeken", puzzelen en debuggen ;) Het is niet de bedoeling dat we je hier van voor-tot-achter aan het handje gaan houden, en daar begint het nu (helaas) wel op te lijken. Daar ben je overigens al vaker op gewezen. Besef wel dat wij hier niet zitten voor jouw lol...

[ Voor 6% gewijzigd door RobIII op 05-09-2006 15:48 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Waarom zouden wij je niet mogen helpen van de policy?
heb al eens onder men voeten gehad toen ik iemand bedankte :p daarop slaat het ;)


manier van sql
= verschillende tabellen in 1 sql regel

Kwestie van niet meer verstaan
let er aub niet op, dat komt wel vaker voor :(
Ik doe nog maar een maandje php/mysql dus ik denk dat ik het voorlopig vrij goed doe, maarja, vragen heb ik al altijd veel gedaan. In school ook :s en dat is idd vaak irriterend voor de lector enzo (rolt ogen)(geen informatica richting)
Bij ms access was het gemakkelijk om relaties te leggen enzo. Kreeg eigenlijk daarin gemakkelijk wat ik wou. Nu is het een aanpassing dat ik meer moet denken :)

Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 10:05
Verwijderd schreef op dinsdag 05 september 2006 @ 15:41:
Mssql wou ik altijd al gebruiken. Maarja, het is te kostelijk voor mij.
Kijk eens naar de gratis versie: MSDE.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
jvdmeer schreef op dinsdag 05 september 2006 @ 16:09:
[...]


Kijk eens naar de gratis versie: MSDE.
Dat heet tegenwoordig "Express" ;)
http://www.microsoft.com/sql/editions/express/default.mspx

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mja, thuis kan ik dat dan wel gebruiken, maar mijn betalende host rekent mij nog extra kosten aan hé. En die liggen redelijk hoog.
Pagina: 1