Ik zeg niet dat het perse slecht is, maar niet als het ten koste gaat van de leesbaarheid van je code. Da's m'n punt. Math.PI bijvoorbeeld is een constante die iedereen gebruikt, en ook prima leesbaar is. Die __CLASS__ ofzo constante is IMHO een nono.quote:Op dinsdag 23 juni 2009 10:54 schreef Intrepidity het volgende:
Klopt, en omdat PHP geen perfecte taal is heeft het wel degelijk zin om constanten in plaats van functieaanroepen te gebruiken, dat was m'n punt..
Gelukkig is het je humble opinion.quote:Op dinsdag 23 juni 2009 11:09 schreef Catbert het volgende:
[..]
Ik zeg niet dat het perse slecht is, maar niet als het ten koste gaat van de leesbaarheid van je code. Da's m'n punt. Math.PI bijvoorbeeld is een constante die iedereen gebruikt, en ook prima leesbaar is. Die __CLASS__ ofzo constante is IMHO een nono.
Euh, ja?quote:
Dat fijn. Uiteindelijk is m'n ultieme doel hier mensen blij te makenquote:
Hmm... als ik die code uitvoer kom ik toch tot iets andere getallen:quote:Op dinsdag 23 juni 2009 10:47 schreef Catbert het volgende:
Je bewijst hier vooral mee hoe brak PHP is. Een fatsoenlijke VM zou die loop uberhaupt niet 10000 keer uitvoeren. Check dit:
[ code verwijderd ]
Test 1 took 673ms.
Test 2 took 943ms.
Test 1 took 645ms.
Test 2 took 931ms.
Test 1 took 616ms.
Test 2 took 610ms.
Test 1 took 619ms.
Test 2 took 633ms.
Je ziet na de 2e test2 run dat de VM 'ziet' wat test 2 doet en het voor je gaat optimaliseren. Ik hoop van harte dat PHP dergelijke zaken ook doet, anders is het te brak voor woorden.
BTW: als je testjes maakt, gebruik dan alsjeblieft meer iteraties dan 10000, dat zegt echt niks.
Je hebt zeker de server VM switch gebruikt? Dan gaat 'ie harder optimaliseren en komt tot de conclusie dat wat 'ie doet compleet zinloos isquote:Op dinsdag 23 juni 2009 15:11 schreef Light het volgende:
Hmm... als ik die code uitvoer kom ik toch tot iets andere getallen:
Test 1 took 4ms.
Test 2 took 3ms.
Test 1 took 3ms.
Test 2 took 0ms.
Test 1 took 0ms.
Test 2 took 0ms.
Test 1 took 0ms.
Test 2 took 0ms.
En dan maakt het niet uit of de loopjes in test1() en test2() tot 1.000.000.000 of tot 2.000.000.000 gaan.
Nee, ik deed java zonder switches. Nu zie ik wel in de help staan dat de default de server VM is, omdat het een server-class machine is. Misschien moet ik het ook niet op een server draaienquote:Op dinsdag 23 juni 2009 15:47 schreef Catbert het volgende:
[..]
Je hebt zeker de server VM switch gebruikt? Dan gaat 'ie harder optimaliseren en komt tot de conclusie dat wat 'ie doet compleet zinloos is
1 2 3 4 5 6 7 8 9 10 | Impact</td><td>Impact:<select name="impact"> <option value=""> - </option> <option value="1">Hoog</option> <option value="2">Middel</option> <option value="3">Laag</option> <option value="4">Geen</option> </select> ?> |
Volgens mij moet je selected hebben, niet checked.quote:Op woensdag 24 juni 2009 00:15 schreef cablegunmaster het volgende:
ik heb een drop down menu , en nu wil ik dat hij blijft staan op de waarde die hij uit de database haalt bvb
[ code verwijderd ]
en nu wil ik dat hij checked invoert bij het getalhoe kan ik dit doen?
Maak een array met als keys de waardes (1, 2, 3, etc) en als values de bijbehorende teksten (laag, middel, hoog, etc). Dan haal je uit de database welke optie is geselecteerd (een id). Je gaat gewoon de array met opties af, en bij het weergeven check je iedere keer even of het id misschien toevallig gelijk is aan de key bij de optie die je gaat weergeven.quote:de impact haalt hij uit de database.maar ik wil de andere opties ook kunnen weergeven dus ik dacht een switch maar dan echo je de options 4 * 4 erin.
moet makkelijker te doen zijn
ook een goeie optie.. beter dan brunod die gebruikte ik eerst. maar dat is ook niet zo productief.quote:Op woensdag 24 juni 2009 00:27 schreef Light het volgende:
[..]
Volgens mij moet je selected hebben, niet checked.
[..]
Maak een array met als keys de waardes (1, 2, 3, etc) en als values de bijbehorende teksten (laag, middel, hoog, etc). Dan haal je uit de database welke optie is geselecteerd (een id). Je gaat gewoon de array met opties af, en bij het weergeven check je iedere keer even of het id misschien toevallig gelijk is aan de key bij de optie die je gaat weergeven.
1 2 3 4 | SELECT TIMESTAMPDIFF(MINUTE,LogOutTime,LogInTime) AS TimeLoggedIn FROM LogTable ?> |
1 2 3 4 5 6 7 8 | $output = strtotime($row['datum_tijd_open']); $output2 = strtotime($row['datum_tijd_gesloten']); $temp = $output - $output2; echo " ".date('d',$temp).' Dagen '; echo date('m',$temp).' Maand '; echo date('Y',$temp).' Jaar verschil'; ?> |
Dat komt omdat je een verschil in tijd om gaat zetten naar een daadwerkelijke datum middels de date() functie. Dat kan niet.quote:Op donderdag 25 juni 2009 09:30 schreef cablegunmaster het volgende:
Ik kom er niet uit : ikl probeerde een functie om de tijd te berekenen tussen 2 datums alleen nu krijg ik de hele tijd het probleem dat de tijden tijdens 0:00 negatief worden. want 23:00 is natuurlijk groter.
Hoe kan ik simpel 2 velden met datetime van elkaar aftrekken?![]()
[ code verwijderd ]
is een functie die me niet hielp. hij gaf me negatieve waardes bij bepaalde tijden.
[ code verwijderd ]
Hieruit krijg ik een heel andere waarde 1976 jaar 17 dagen etc... maar de minuten en seconde kloppen wel.
1 2 3 4 5 6 7 8 9 10 | $output = strtotime($row['datum_tijd_open']); $output2 = strtotime($row['datum_tijd_gesloten']); $diff = $output - $output2; $dagen = $diff / 86400; $uren = ($diff % 86400) / 3600; $minuten = (($diff % 86400) % 3600) / 60; $seconden = ((($diff % 86400) % 3600) % 60) / 1; // die /1 kan natuurlijk weg, gaat om het idee ?> |
hoe pak je daar alleen de getallen voor de komma?quote:Op donderdag 25 juni 2009 09:54 schreef HuHu het volgende:
[..]
Dat komt omdat je een verschil in tijd om gaat zetten naar een daadwerkelijke datum middels de date() functie. Dat kan niet.
Een timestamp van 0 staat gelijk aan 1 januari 1970 @ 00:00 en dus niet gelijk aan 1 januari 0 @ 00:00. Dat laatste is wat je zou willen als je wilt weten hoeveel jaren/maanden/weken/dagen/uren/minuten/seconden er tussen 2 datums zitten.
Je kunt het met de hand uitrekenen:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | SELECT leverancier.naam AS naam, incident.incidentid AS id, incident.systeem_naam AS Systeemnaam, datum_tijd_open AS 'Datumtijdmelding', incident.omschrijving AS 'omschrijving', incident.workaround AS 'Workaround', component.leverancier AS Leverancier, component.merk AS merk, component.soort AS 'apparaattype',component.aanschaf_jaar AS 'aanschaf' FROM incident INNER JOIN component ON incident.systeem_naam = component.systeem_naam INNER JOIN leverancier ON component.leverancier = leverancier.leverancier_id WHERE incident.omschrijving IN ( SELECT incident.omschrijving FROM incident GROUP BY omschrijving HAVING ( SELECT COUNT(incident.omschrijving) FROM incident WHERE incident.probleemid = '0') >=2 ) ORDER BY incident.omschrijving"; ?> |
Aangepast en werkendquote:Op donderdag 25 juni 2009 09:54 schreef HuHu het volgende:
[..]
Dat komt omdat je een verschil in tijd om gaat zetten naar een daadwerkelijke datum middels de date() functie. Dat kan niet.
Een timestamp van 0 staat gelijk aan 1 januari 1970 @ 00:00 en dus niet gelijk aan 1 januari 0 @ 00:00. Dat laatste is wat je zou willen als je wilt weten hoeveel jaren/maanden/weken/dagen/uren/minuten/seconden er tussen 2 datums zitten.
Je kunt het met de hand uitrekenen:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | if(isset($row['datum_tijd_gesloten']) && $row['status'] == 'Gesloten') { $output = strtotime($row['datum_tijd_open']); $output2 = strtotime($row['datum_tijd_gesloten']); }elseif($row['status'] != 'Gesloten'){ $output = strtotime($row['datum_tijd_open']); $date = date('Y-m-d H:i:s'); $output2 = strtotime($date); } $diff = $output2 - $output; $dagen = floor($diff / 86400); $uren = floor(($diff % 86400) / 3600); $minuten = floor((($diff % 86400) % 3600) / 60); $seconden = floor(((($diff % 86400) % 3600) % 60)); // die /1 kan natuurlijk weg, gaat om het idee if($row['status'] == 'Gesloten') { echo "Het probleem duurde ".$dagen." dagen ".$uren." uur ".$minuten." minuten ".$seconden." seconden"; }else{ echo "Het probleem duurt al ".$dagen." dagen ".$uren." uur ".$minuten." minuten ".$seconden." seconden"; } ?> |
Opgelost met een where en een andquote:Op donderdag 25 juni 2009 12:13 schreef cablegunmaster het volgende:
[..]
hoe pak je daar alleen de getallen voor de komma?en een groot probleem. Deze query ben ik 0,5 dag mee bezig geweest om te formuleren.
[ code verwijderd ]
alleen nu geeft hij na toevoegen van problemen ook incidenten terug die meer dan 2 rijen heeft
en probleem id 0 hoe los ik dit op?![]()
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 | echo "<h5><font color=#ff9900><b>Deze week:</b></font></h5><hr>"; global $mainframe; $db =& JFactory::getDBO(); $today_month = date( 'm', $time); $query = "SELECT * FROM jos_eventlist_events WHERE ((WEEK(dates) = WEEK(now() + INTERVAL 0 WEEK) AND YEAR(dates) = YEAR(now() + INTERVAL 0 WEEK)) OR (WEEK(now() + INTERVAL 0 WEEK BETWEEN WEEK(dates) AND WEEK(enddates)) AND YEAR(now() + INTERVAL 0 WEEK BETWEEN YEAR(dates) AND YEAR(enddates)))) GROUP BY dates ORDER BY dates, times ASC limit 25"; $db->setQuery( $query, 0, $count ); $rows = $db->loadObjectList(); echo '<ul>'; foreach($rows as $row) { echo " <b><a href='$JURI index.php?option=com_eventlist&view=details&id=$row->id'>$row->title </a></b><BR /> <li>Wanneer: <b>$row->dates</b><BR /> Aanvang: $row->times<BR /><BR /> </li>"; } if (empty($row)) { echo 'Er zijn geen evenementen deze week!<br>Check volgende week nog eens.'; } echo '</ul><hr>'; ?> |
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 | echo "<h5><font color=#ff9900><b>Deze week:</b></font></h5><hr>"; global $mainframe; $db =& JFactory::getDBO(); $today_month = date( 'm', $time); $query = "SELECT * FROM jos_eventlist_events WHERE published=1 AND ((WEEK(dates) = WEEK(now() + INTERVAL 0 WEEK) AND YEAR(dates) = YEAR(now() + INTERVAL 0 WEEK)) OR (WEEK(now() + INTERVAL 0 WEEK BETWEEN WEEK(dates) AND WEEK(enddates)) AND YEAR(now() + INTERVAL 0 WEEK BETWEEN YEAR(dates) AND YEAR(enddates)))) GROUP BY dates ORDER BY dates, times ASC limit 25"; $db->setQuery( $query, 0, $count ); $rows = $db->loadObjectList(); echo '<ul>'; foreach($rows as $row) { echo " <b><a href='$JURI index.php?option=com_eventlist&view=details&id=$row->id'>$row->title </a></b><BR /> <li>Wanneer: <b>$row->dates</b><BR /> Aanvang: $row->times<BR /><BR /> </li>"; } if (empty($row)) { echo 'Er zijn geen evenementen deze week!<br>Check volgende week nog eens.'; } echo '</ul><hr>'; ?> |
Volgens mij niet die or is puur voor de 2 datum selectiesquote:Op vrijdag 26 juni 2009 13:39 schreef Scorpie het volgende:
Je moet ook in de OR clause een published = 1 zetten
Het script verwacht dat er via GET of POST een veld "comment" wordt meegestuurd, maar dat gebeurt niet. Dan krijg je die melding.quote:Op zaterdag 27 juni 2009 16:46 schreef Gruning3r het volgende:
Kan iemand me helpen, soms krijg ik deze melding bij mijn gastenboek.Notice: Undefined index: comment op regel 111 dit is de regel $comment =$_REQUEST["comment"];
alvast bedankt.![]()
Maar hoe kan ik het oplossen dan? alvast bedanktquote:Op zaterdag 27 juni 2009 16:49 schreef Light het volgende:
[..]
Het script verwacht dat er via GET of POST een veld "comment" wordt meegestuurd, maar dat gebeurt niet. Dan krijg je die melding.
quote:Op zaterdag 27 juni 2009 16:46 schreef Gruning3r het volgende:
Kan iemand me helpen, soms krijg ik deze melding bij mijn gastenboek.Notice: Undefined index: comment op regel 111 dit is de regel $comment =$_REQUEST["comment"];
alvast bedankt. ^O^ :D
1 2 3 | $comment = isset($_REQUEST['comment'])?$_REQUEST['comment']:"Default"; ?> |
quote:Op zaterdag 27 juni 2009 22:14 schreef wobbel het volgende:
Hoe maak ik eigenlijk een simpel PHP/MySQL navigatie systeem?
Dat ik dus 50150 resultaten netjes per 50 kan opdelen, met onderaan < Vorige | 1-2-3-4-5-6-7 | Volgende > enzo...
1 2 3 4 5 6 7 8 | $page = isset($_REQUEST['page'])?($_REQUEST['page'] - 1)*50:0; while($row = mysql_fetch_assoc(mysql_query("SELECT * FROM table LIMIT ".$page.",50")) { //blablabla } ?> |
Owjah, dat was hetquote:Op zondag 28 juni 2009 11:33 schreef FastFox91 het volgende:
@Wobbel
" With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15"
Je krijgt dus maximaal tien terug, omdat er maar zeven rijen zijn krijg je er minder terug. Maar zes rijen terug verwachten is sowieso fout.
Aan het eind van het laden opslaan lijkt me vele malen makkelijker dan via memcached en een cronjob?quote:Op zaterdag 27 juni 2009 12:21 schreef Likkende_Lassie het volgende:
Momenteel ben ik bezig een web applicatie icm Google Maps.
Nu is het de bedoeling dat er uitgebreide stats worden bijgehouden, ook als een zogeheten marker per bedrijf wordt weergegeven.
Nu is dat bijhouden niet zo'n probleem, maar vraag ik me af hoe ik dit het beste kan doen qua performance:
Via memcached bijhouden welke markers/bedrijven er zijn weergegeven, vervolgens elke 5 min. een script laten draaien welke de memcached in de database stopt, en memcached opschoont.
Of aan het einde van het laden van alle markers deze met 1 query opslaan in de database...
Wat is het snelst en het meeste stabiel? Er van uitgaande dat er straks behoorlijk wat mensen gebruik gaan maken van de app.
het is idd een feit dat het direct uitvoeren van een query makkerlijker is, maar hoe zit het met de performance? en dus straks de totale load op de server.quote:Op zondag 28 juni 2009 12:08 schreef Xcalibur het volgende:
[..]
Aan het eind van het laden opslaan lijkt me vele malen makkelijker dan via memcached en een cronjob?
Bovendien heb je je data dan meteen. 1 insertquery kost natuurlijk helemaal geen tijd....
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |