Hmm... ik gebruik feitelijk niet de $_POST array, maar een opgeschoonde array, maar het idee is goedquote:Op donderdag 29 november 2007 18:58 schreef SuperRembo het volgende:
Je hoeft toch alleen de key aan die functie door te geven? $_POST is super-global, dus die heb je ook tot je beschikking binnen de functie.
Opzet is inderdaad goed, maar krijg ook brussel ed steden terugquote:Op vrijdag 30 november 2007 13:53 schreef Aquaatje het volgende:
[..]
Wat voor oud brak mormel gebruik je als server dat je geen nesting kunt toepassen?![]()
[ code verwijderd ]
Deze dan?
Het is mogelijk dat je niet nederlandse steden terug krijgt als je titel bij meerdere landen hoort.quote:Op vrijdag 30 november 2007 20:59 schreef Chandler het volgende:
[..]
Opzet is inderdaad goed, maar krijg ook brussel ed steden terugstom database opzet
waar ik helaas niets aan kan veranderen
Maar tnx, ik ga het maar even omslachtig doen met 2 queries!
Haal die Group By er eens uit?quote:Op vrijdag 30 november 2007 11:01 schreef Chandler het volgende:
nu wil ik met een query uit deze database alle plaatsnamen halen uit Nederland (NL)
Ik heb getract met een left join query alle namen te pakken waar een property land in zit met de value NL en daarna met distinct de steden er uit te halen, maar dit werkte niet.
voorbeeld:
[ code verwijderd ]
maar helaas kreeg ik 0 resultatenwat doe ik fout?
Zekers, er werken meer dan 100 sites met deze database structuur!quote:Op zaterdag 1 december 2007 09:29 schreef Farenji het volgende:
Is de data in de db wel ok?
Nee, ik had het niet getest.quote:Op zaterdag 1 december 2007 10:03 schreef Chandler het volgende:
[..]
Zekers, er werken meer dan 100 sites met deze database structuur!
@Light, dat levert ook niets op. Maar volgens mij wist je dat al
1 2 3 4 5 6 | FROM database d1 INNER JOIN database d2 ON d2.naam = d1.naam WHERE d1.property = 'stad' AND d2.property = 'land' AND d2.value = 'NL' |
Dat kan het probleem niet zijn want je gebruikt d2.property = 'land' AND d2.value = 'NL', dus spreektaal NL voldoet daar niet aan.quote:Op zaterdag 1 december 2007 11:36 schreef Chandler het volgende:
Ik zie touwens de fout in het database systeem
Aangezien er ook NL voor kan komen bij andere waarden (zoals spreektaal) wordt NL daar ook op gevalideerd en komt deze ook naar boven als zijnde een nederlandse plaats
d2.property = 'land' AND d2.value = 'NL' die staan dus op dezelfde regel.quote:Is het mogelijk om de d2.property en d2.value uit 1 regel te halen? want nu wordt het uit meerdere rijen gehaald (bv 1e rij de property en 3e rij de value?)
1 2 3 4 5 6 | `naam` varchar(20) collate latin1_general_ci NOT NULL, `property` varchar(20) collate latin1_general_ci NOT NULL, `value` varchar(255) collate latin1_general_ci NOT NULL PRIMARY KEY (`naam`,`property`,`value`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; |
1 2 3 4 5 | FROM db1 WHERE property = 'land' GROUP BY naam HAVING Count(*) > 1 |
Wat nou als je er per secconde door heen loopt en steeds als je een grens (dag/maand) over gaat stel je een tellertje bij?quote:Op zaterdag 1 december 2007 16:35 schreef Schepseltje het volgende:
Hallo
ik zoek het volgende.. maar kan het niet vinden..
Ik heb 2 datums, die wil ik van elkaar aftrekken zodat je kunt zien hoeveel jaren, maanden, weken, dagen, uren, minuten en seconden er tussenzitten
dit zou heel simpel zijn wanneer elke maand exact 30 dagen had, maar aangezien het nogal een verschil maakt vanaf welke datum je begint te rekenen, is dit nogal een lastige opgave..
bestaat hier een kant en klare functie voor? ik heb er verschillende geprobeerd, maar geen enkele lijkt goed te werken..
de nerds op tweakers lijken er na 5 pagina's ook niet uit te komen..
ja maar hoeveel seconden heeft een maand? februari heeft er minder dan decemberquote:Op zaterdag 1 december 2007 18:29 schreef WyriHaximus het volgende:
[..]
Wat nou als je er per secconde door heen loopt en steeds als je een grens (dag/maand) over gaat stel je een tellertje bij?
Dat hoef je niet te weten, je zet de startdatum om naar een timestamp, telt er 1 bij op en zet de timestamp weer om naar een datum. Hier zijn functies voor in php. En dit doe je net zo lang tot de timestamp groter of gelijk is als de timestamp van de einddatum. Elke keer check je of de dag-, maand- of het jaargetal is veranderd tov de vorige datum en dit hou je bij.quote:Op zaterdag 1 december 2007 18:47 schreef Schepseltje het volgende:
[..]
ja maar hoeveel seconden heeft een maand? februari heeft er minder dan december
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 | function datediff($date1,$date2) { $timediff =intval( $date1-$date2 ); if ($timediff<0) { $timediff = $timediff * -1; $t=$date1; $date1=$date2; $date2=$t; } // als het verschil negatief is, maak het positief $years = 0; $months = 0; $days=intval($timediff/86400); $remain=$timediff%86400; $hours=intval($remain/3600); $remain=$remain%3600; $mins=intval($remain/60); $secs=$remain%60; for (;;) { $no_of_days_in_month=date("t",mktime(0,0,0,date("m",$date1),0,date("Y",$date1))); // dagen in de maand if ($months>11) { $months = 0; $years++; } if ($no_of_days_in_month<=$days) { $days=$days-$no_of_days_in_month; $date1 = $date1 - $no_of_days_in_month*86400; $months++; } else { break; } } if ($years>0) { $output .= "$years jaar, "; } if ($months>0) { if ($months==1) { $output .= "1 maand, "; } else { $output .= "$months maanden, "; } } if ($days>0) { if ($days==1) { $output .= "1 dag, "; } else { $output .= "$days dagen, "; } } if ($hours>0) { if ($hours==1) { $output .= "1 uur, "; } else { $output .= "$hours uren, "; } } if ($mins>0) { if ($mins==1) { $output .= "1 minuut, "; } else { $output .= "$mins minuten, "; } } if ($secs>0) { if ($secs==1) { $output .= "1 seconde, "; } else { $output .= "$secs seconden, "; } } return substr($output,0,-2); } ?> |
Precies, en als je het op de dag af weet is het laatste stukkie een makkiequote:Op zaterdag 1 december 2007 19:11 schreef Farenji het volgende:
[..]
Dat hoef je niet te weten, je zet de startdatum om naar een timestamp, telt er 1 bij op en zet de timestamp weer om naar een datum. Hier zijn functies voor in php. En dit doe je net zo lang tot de timestamp groter of gelijk is als de timestamp van de einddatum. Elke keer check je of de dag-, maand- of het jaargetal is veranderd tov de vorige datum en dit hou je bij.
Overigens is per seconde door de range loopen wel erg inefficient, je kan beter per 23*60*60 - 1 secondes loopen - een dag is nl nooit korter dan 23 uur en dus zal er nooit meer dan 1 dag verschil zijn.
Als je die data in timestamps hebt dan kun je die toch gewoon van elkaar aftrekken? Dan heb je het verschil tussen de data, in seconden. Da's wel om te rekenen naar minuten-uren-dagen, lijkt mequote:Op zaterdag 1 december 2007 16:35 schreef Schepseltje het volgende:
Hallo
ik zoek het volgende.. maar kan het niet vinden..
Ik heb 2 datums, die wil ik van elkaar aftrekken zodat je kunt zien hoeveel jaren, maanden, weken, dagen, uren, minuten en seconden er tussenzitten
dit zou heel simpel zijn wanneer elke maand exact 30 dagen had, maar aangezien het nogal een verschil maakt vanaf welke datum je begint te rekenen, is dit nogal een lastige opgave..
bestaat hier een kant en klare functie voor? ik heb er verschillende geprobeerd, maar geen enkele lijkt goed te werken..
de nerds op tweakers lijken er na 5 pagina's ook niet uit te komen..
Als je zoals hij zegt er van uit gaat dat er 30 dagen in een maand zitten en 365 dagen in een jaar is dat een makkie. Alleen wil je dit precies doen dan word het in eens een stuk moeilijker, en dat is nou net wat hij wilquote:Op zaterdag 1 december 2007 21:40 schreef Light het volgende:
[..]
Als je die data in timestamps hebt dan kun je die toch gewoon van elkaar aftrekken? Dan heb je het verschil tussen de data, in seconden. Da's wel om te rekenen naar minuten-uren-dagen, lijkt me
Tot dagen wel, maar hij wil het verder omrekenen naar maanden en jaren. Zie ook 't GoT topic.quote:Op zaterdag 1 december 2007 21:40 schreef Light het volgende:
[..]
Als je die data in timestamps hebt dan kun je die toch gewoon van elkaar aftrekken? Dan heb je het verschil tussen de data, in seconden. Da's wel om te rekenen naar minuten-uren-dagen, lijkt me
ik zou zeggen probeer mijn code eens.. lijkt waterdichtquote:Op zaterdag 1 december 2007 22:01 schreef SuperRembo het volgende:
[..]
Tot dagen wel, maar hij wil het verder omrekenen naar maanden en jaren. Zie ook 't GoT topic.
Als je het verschil in jaren, maanden, dagen, uren etc wil hebben dan zal je bij de jaren moeten beginnen, daarna het aantal resterende maanden etc. Ik vraag me af of je het helemaal waterdicht kan krijgen.
Geeft het geen problemen als je met schrikkeljaren aan de gang gaat?quote:Op zaterdag 1 december 2007 22:06 schreef Schepseltje het volgende:
[..]
ik zou zeggen probeer mijn code eens.. lijkt waterdicht
als ik voor begindatum 0 invul (01-01-1970) dan geeft ie
jaar: 37
maanden: 11
dagen: 0
uren: 22
minuten: 4
seconden: 50
als er ook maar 1 foutje in zit dan moet dat over een periode van 37 jaar wel opvallen
nee want hij berekent voor elke maand het aantal dagen gebaseerd op maand en jaar, dus in dat geval rekent hij voor februari 29 dagenquote:Op zaterdag 1 december 2007 22:09 schreef WyriHaximus het volgende:
[..]
Geeft het geen problemen als je met schrikkeljaren aan de gang gaat?
Mooi stukje code om ff te bewaren dusquote:Op zaterdag 1 december 2007 22:10 schreef Schepseltje het volgende:
[..]
nee want hij berekent voor elke maand het aantal dagen gebaseerd op maand en jaar, dus in dat geval rekent hij voor februari 29 dagen
ja leuk als je bv iemands exacte leeftijd wil berekenen ofzoquote:Op zaterdag 1 december 2007 22:15 schreef WyriHaximus het volgende:
[..]
Mooi stukje code om ff te bewaren dus.
Ja of wilt weten hoelang het duur voordat je kunt stoppen met werken of wanneer je 50 jaar getrouwt bent. Of what ever zijn zoveel dingen waar dit handig voor isquote:Op zaterdag 1 december 2007 22:15 schreef Schepseltje het volgende:
[..]
ja leuk als je bv iemands exacte leeftijd wil berekenen ofzo
Wat ik daarmee bedoelde was een geval als dit:quote:Op zaterdag 1 december 2007 22:06 schreef Schepseltje het volgende:
lijkt waterdicht
bij 02/02/2003 - 01/03/2004 zegt iequote:Op zaterdag 1 december 2007 22:28 schreef SuperRembo het volgende:
[..]
Wat ik daarmee bedoelde was een geval als dit:
02/02/2003 - 01/03/2004 is dat
1 jaar (02/02/2003 - 02/02/2004) + 28 dagen (02/02/2004 - 01/03/2004)
of
1 jaar (01/03/2003 - 01/03/2004) + 27 dagen (02/02/2003 - 01/03/2003)
Nou de oplossing met loop is ranzig/lomp. En de 'if ($months>11) { $months = 0; $years++; }' check zou na '$month++' moeten staan.quote:Op zaterdag 1 december 2007 23:14 schreef Schepseltje het volgende:
als iemand nog een fout ziet hoor ik het wel..
1 2 3 4 5 6 7 8 | for (; ; ) { if ($i > 10) { break; } echo $i; $i++; } |
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 | { if ($date1 > $date2) return false; $year1 = date("Y", $date1); $month1 = date("n", $date1); $day1 = date("j", $date1); $year2 = date("Y", $date2); $month2 = date("n", $date2); $day2 = date("j", $date2); $years = $year2 - $year1; $months = $month2 - $month1; $days = $day2 - $day1; if ($days < 0) { --$months; $days += date("t", mktime(0, 0, 0, $month2 + 1, 0, $year2)); } if ($months < 0) { --$years; $months += 12; } return array("years" => $years, "months" => $months, "days" => $days); } |
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | /* Plugin Name: DateDiff Version: 1.0 Plugin URI: http://maseko.com/project/wp-plugins/wp-datediff/ />Description: Calculate the difference between two dates like Microsoft Excel's datedif. Author: maseko Author URI: http://maseko.com/ /> License information Copyright 2005 Released under the GPL license http://www.gnu.org/licenses/gpl.txt This file is a plugin for WordPress WordPress is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ function datediff($start_date,$end_date="now",$unit="D") { $unit = strtoupper($unit); $start=strtotime($start_date); if ($start === -1) { print("invalid start date"); } $end=strtotime($end_date); if ($end === -1) { print("invalid end date"); } if ($start > $end) { $temp = $start; $start = $end; $end = $temp; } $diff = $end-$start; $day1 = date("j", $start); $mon1 = date("n", $start); $year1 = date("Y", $start); $day2 = date("j", $end); $mon2 = date("n", $end); $year2 = date("Y", $end); switch($unit) { case "D": echo intval($diff/(24*60*60)); break; case "M": if($day1>$day2) { $mdiff = (($year2-$year1)*12)+($mon2-$mon1-1); } else { $mdiff = (($year2-$year1)*12)+($mon2-$mon1); } echo $mdiff; break; case "Y": if(($mon1>$mon2) || (($mon1==$mon2) && ($day1>$day2))){ $ydiff = $year2-$year1-1; } else { $ydiff = $year2-$year1; } echo $ydiff; break; case "YM": if($day1>$day2) { if($mon1>=$mon2) { $ymdiff = 12+($mon2-$mon1-1); } else { $ymdiff = $mon2-$mon1-1; } } else { if($mon1>$mon2) { $ymdiff = 12+($mon2-$mon1); } else { $ymdiff = $mon2-$mon1; } } echo $ymdiff; break; case "YD": if(($mon1>$mon2) || (($mon1==$mon2) &&($day1>$day2))) { $yddiff = intval(($end - mktime(0, 0, 0, $mon1, $day1, $year2-1))/(24*60*60)); } else { $yddiff = intval(($end - mktime(0, 0, 0, $mon1, $day1, $year2))/(24*60*60)); } echo $yddiff; break; case "MD": if($day1>$day2) { $mddiff = intval(($end - mktime(0, 0, 0, $mon2-1, $day1, $year2))/(24*60*60)); } else { $mddiff = intval(($end - mktime(0, 0, 0, $mon2, $day1, $year2))/(24*60*60)); } echo $mddiff; break; default: print("{Datedif Error: Unrecognized \$unit parameter. Valid values are 'Y', 'M', 'D', 'YM'. Default is 'D'.}"); } } ?> |
1 2 3 | $now = date("Y-m-d"); $td = "2006-9-24"; $tde = "2007-12-21"; echo " Over ";datediff("now","$tde","M");echo " maanden en ";datediff("now", "$tde", "MD");echo " dagen ben ik klaar! (ongeveer dan..)" ?> |
nee, elke loop is voor een maand, en bij elke maand moet hij opnieuw kijken hoeveel dagen die maand heeftquote:Op zondag 2 december 2007 00:38 schreef SuperRembo het volgende:
Die loop is ranzig omdat als de datums 10 jaar uit elkaar liggen je minsten 8*12=48 keer voor niets de loop doorloopt en dus 48*3=144 keer date() voor niets gebruikt. Beetje jammer.
Ik zou 't zo aanpakken.
[ code verwijderd ]
Misschien nog niet helemaal bug-vrij, maar ik denk dat 't een goede basis is voor een elegante oplossing. Er zit nog geen ondersteuning voor tijd in, maar die is er zo aan toe te voegen.
quote:Op maandag 3 december 2007 15:58 schreef Chandler het volgende:
Vraagje, of iemand hier een bestaande routine voor weet.
Stel je hebt een grote lap tekst met spaties en tekens. Nu wil ik graag dat iedere regel wordt gecontrolleerd op het aantal spaties en stel alle regels beginnen minimaal 4 spaties vanaf links dan wil ik deze spaties verwijderen.
Hopelijk begrijpt iemand mij :P
1 2 3 | ltrim() ?> |
quote:Op maandag 3 december 2007 16:53 schreef DaFrenk het volgende:
Grmbl.. hoe krijg ik PHP zover dat hij geldbedragen als "7.50" schrijft en niet als "7.5"? Dus dat hij wel die 0 toevoegt?
1 2 3 | printf('%2f', $bedrag); ?> |
number_format();quote:Op maandag 3 december 2007 16:53 schreef DaFrenk het volgende:
Grmbl.. hoe krijg ik PHP zover dat hij geldbedragen als "7.50" schrijft en niet als "7.5"? Dus dat hij wel die 0 toevoegt?
1 2 3 4 5 6 7 8 | $money1 = 68.75; $money2 = 54.35; $money = $money1 + $money2; // echo $money will output "123.1"; $formatted = sprintf("%01.2f", $money); // echo $formatted will output "123.10" ?> |
Probeer een van de twee eensquote:Op maandag 3 december 2007 17:07 schreef DaFrenk het volgende:
Oké! Bedankt.. welke van de twee moet ik nu gebruiken?
1 2 3 4 5 6 7 8 9 | news.item.edit.php news.item.delete.php news.category.insert.php news.category.edit.php news.category.delete.php etc. |
1 2 | news.category.php |
http://nl2.php.net/class is een hele goede om mee te beginnenquote:Op maandag 3 december 2007 21:26 schreef PiRANiA het volgende:
ik snap eigenlijk nog steeds niet wat classes zijn, wat ze doen en waar ze goed voor zijn...
ik heb ze in 3 jaar nog nooit gebruikt iig...
wie legt het me uit?
Daarnaast zijn deze ook erg handig:quote:Op maandag 3 december 2007 21:32 schreef JortK het volgende:
[..]
http://nl2.php.net/class is een hele goede om mee te beginnen
Ik doelde eingelijk meer op een functie dat van het volgende voorbeeldquote:
1 2 3 4 5 6 7 8 9 10 | "ae" => "United Arab Emirates", "af" => "Afghanistan", "ag" => "Antigua and Barbuda", "ai" => "Anguilla", "al" => "Albania", "am" => "Armenia", "an" => "Netherlands Antilles", "ao" => "Angola", "aq" => "Antarctica", |
1 2 3 4 5 6 7 8 9 10 | "ae" => "United Arab Emirates", "af" => "Afghanistan", "ag" => "Antigua and Barbuda", "ai" => "Anguilla", "al" => "Albania", "am" => "Armenia", "an" => "Netherlands Antilles", "ao" => "Angola", "aq" => "Antarctica", |
htmlentities?quote:Op dinsdag 4 december 2007 16:02 schreef markiemark het volgende:
Hooii lieve vrienden! Heb in mijn mysql database een aantal teksten staan. Deze zijn in vershchillende talen. Het probleem is dat deze de pure teksten zijn dus inclusief alle haakjes en streepjes, niet omgezet naar &..; code. Als ik deze weergeef in mijn browser komen er in Firefox blokjes met vraagtekentjes te staan en in internet explorer kleine vierkantjes. Hoe kan ik dit oplossen. De codering in de database is utf-8- unicode.
Hoe kan ik dit oplossen?
moet daar dan nog iets achter? Zie http://nl2.php.net/manual/en/function.htmlentities.php hier dat er de nodige aanvullingen kunnen zijn..quote:
Probeer eerst maar gewoon eensquote:Op dinsdag 4 december 2007 16:06 schreef markiemark het volgende:
[..]
moet daar dan nog iets achter? Zie http://nl2.php.net/manual/en/function.htmlentities.php hier dat er de nodige aanvullingen kunnen zijn..
1 2 3 | htmlentities($string); ?> |
Er zit ook html in de database.. Die wordt dan ook omgezet naar tekst.. en das niet de bedoeling..quote:Op dinsdag 4 december 2007 16:07 schreef JortK het volgende:
[..]
Probeer eerst maar gewoon eens
[ code verwijderd ]
Als je met utf-8 wil werken moet *alles* utf-8 zijn, niet alleen je database. Dus zorgen dat je pagina ook in utf-8 is (meta content-type tag goed zetten en vooral ook zorgen dat utf-8 als content-type in de page headers wordt meegestuurd) en in php zorgen dat de mbstring extentie is geinstalleerd en alleen de utf-8 veilige functies gebruiken. Alle standaard string functies zoals strlen etc raken in de war van utf-8 en geven verkeerde resultaten als je niet expliciet instelt dat de utf-8 versie gebruikt moet worden, dus bijv door mb_strlen te gebruiken ipv strlen.quote:Op dinsdag 4 december 2007 16:02 schreef markiemark het volgende:
Hooii lieve vrienden! Heb in mijn mysql database een aantal teksten staan. Deze zijn in vershchillende talen. Het probleem is dat deze de pure teksten zijn dus inclusief alle haakjes en streepjes, niet omgezet naar &amp;amp;..; code. Als ik deze weergeef in mijn browser komen er in Firefox blokjes met vraagtekentjes te staan en in internet explorer kleine vierkantjes. Hoe kan ik dit oplossen. De codering in de database is utf-8- unicode.
Hoe kan ik dit oplossen?
Dat is dus eigenlijk niet te doen.. met htmlentities() werkt het ook niet omdat dan de html code ook wordt omgezet.. hoe kan ik er voor zorgen dat de tekens wel om worden gezet, maar de html niet?quote:Op dinsdag 4 december 2007 21:48 schreef Farenji het volgende:
[..]
Als je met utf-8 wil werken moet *alles* utf-8 zijn, niet alleen je database. Dus zorgen dat je pagina ook in utf-8 is (meta content-type tag goed zetten en vooral ook zorgen dat utf-8 als content-type in de page headers wordt meegestuurd) en in php zorgen dat de mbstring extentie is geinstalleerd en alleen de utf-8 veilige functies gebruiken. Alle standaard string functies zoals strlen etc raken in de war van utf-8 en geven verkeerde resultaten als je niet expliciet instelt dat de utf-8 versie gebruikt moet worden, dus bijv door mb_strlen te gebruiken ipv strlen.
Dat wordt volgens mij een lastig verhaalquote:Op woensdag 5 december 2007 11:03 schreef markiemark het volgende:
[..]
Dat is dus eigenlijk niet te doen.. met htmlentities() werkt het ook niet omdat dan de html code ook wordt omgezet.. hoe kan ik er voor zorgen dat de tekens wel om worden gezet, maar de html niet?
Tja, dat is en blijft de vraag hé.quote:Op dinsdag 4 december 2007 21:32 schreef HuHu het volgende:
Ligt er een beetje aan wat je vervolgens met die zoekwoorden wil gaan doen. Wil je kijken wel woord afzonderlijk het meeste voor komt, dan kun je ze apart opslaan. Maar wil je ook relaties tussen zoekwoorden weten, dan moet je weer andere dingen bijhouden.
Ik ben altijd ervoor om je database relationeel te houden.quote:Op woensdag 5 december 2007 12:15 schreef Chandler het volgende:
[..]
Tja, dat is en blijft de vraag hé.
Maar zou jij relaties leggen? of juist niet?
En hier istie dan, als iemand er nog nut voor zietquote:Op dinsdag 4 december 2007 21:21 schreef Chandler het volgende:
Tnx Aquaatje, ik zal even een routine schrijven.
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 57 58 59 60 61 62 63 64 65 | function checkSpaces($in) { $inNew = explode("\n", $in); $inItems = count($inNew); $inMin = 1000; for ($x = 0; $x < $inItems; $x++) { for ($y = 0; $y < strlen($inNew[$x]); $y++) { if (substr($inNew[$x], $y, 1) != " ") { $inMin = $y; break; } } } return $inMin; } function removeSpaces($in, $remove) { $inNew = explode("\n", $in); $inItems = count($inNew); for ($x = 0; $x < $inItems; $x++) { $inNew[$x] = substr($inNew[$x], $remove, strlen($inNew[$x]) - $remove); } return implode("\n", $inNew); } $str = " hello world moi hoi lol test test test tes"; <h2>Original</h2> <pre> echo checkSpaces($str); echo "\r\n" . $str; </pre> <h2>Altered</h2> <pre> echo removeSpaces($str, checkSpaces($str)); </pre> ?> |
Het kan in ieder geval ietsje korterquote:Op woensdag 5 december 2007 13:35 schreef Chandler het volgende:
[..]
En hier istie dan, als iemand er nog nut voor ziet
[ code verwijderd ]als het sneller kan wil ik dit ook wel horen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function ltrimSpaceColumns($in) { if(preg_match_all('|^ +|m', $in, $matches)) { $min = 0x7fffffff; foreach($matches[0] as $match) { if(($newMin = strlen($match)) < $min) { $min = $newMin; } } if($min > 0) { $in = preg_replace('|^ {'.$min.'}|m', '', $in); } } return $in; } ?> |
1 2 3 4 5 6 7 8 9 10 11 | FROM client AS c WHERE c.DateAdded != 0 ORDER BY c.DateAdded DESC LIMIT ".$max." SELECT CONCAT('Updated client: ',c.Name) AS Description, c.DateUpdated AS Date FROM client AS c WHERE c.DateUpdated != 0 ORDER BY c.DateUpdated DESC LIMIT ".$max." |
1 2 3 4 5 6 7 8 | CONCAT('New client: ',c1.Name) AS DescriptionNew, c1.DateAdded, CONCAT('Updated client: ',c2.Name) AS DescriptionUpdated, c2.DateUpdated, CONCAT('Bladiebla client: ',c3.Name) AS DescriptionBladiebla, c3.DateBladiebla FROM client AS c1, client AS c2, client AS c3 WHERE c1.DateAdded != 0 AND c2.DateUpdated != 0 AND c3.DateBladiebla != 0 ORDER BY c.DateAdded DESC, c2.DateUpdated DESC, c3.DateBladiebla DESC LIMIT $max |
Zoiets?quote:Op woensdag 5 december 2007 21:59 schreef Geqxon het volgende:
Een enorm simpele vraag...
1 2 3 4 5 | FROM client AS c WHERE c.DateAdded != 0 OR c.DateUpdated != 0 ORDER BY (CASE c.DateUpdated WHEN 0 THEN c.DateAdded ELSE c.DateAdded END) DESC LIMIT ".$max." |
Er zijn clients zonder aanmaakdatum, dit is uit een oude systeemmigratie. Om deze uit het logboek te vermijden staat er deze CASE bij.quote:Op woensdag 5 december 2007 23:25 schreef SuperRembo het volgende:
[..]
Zoiets?
[ code verwijderd ]
Warom zijn die datum niet gewoon NULL als er geen datum in staat? (Dan kan je ook gewoon IFNULL gebruiken in plaats van die CASE).
Zijn er ook clients die niet toegevoegd zijn (DateAdded = 0)?
Is het niet handiger om de DateUpdated bij het toevoegen gelijk te maken aan DateAdded? (Dat sorteert makkelijker en sneller)
Dan moet je gewoon een union / union all gebruiken.quote:Op woensdag 5 december 2007 23:31 schreef Farenji het volgende:
Ongetest:
zorg dat in elke query de kolomnamen hetzelfde zijn en zet alle queries onderaan in 1 string, gescheiden door puntkomma.Voor deze string uit. Als het goed is heb je dan alles in 1 recordset.
quote:Op woensdag 5 december 2007 23:31 schreef Farenji het volgende:
Ongetest:
zorg dat in elke query de kolomnamen hetzelfde zijn en zet alle queries onderaan in 1 string, gescheiden door puntkomma.Voor deze string uit. Als het goed is heb je dan alles in 1 recordset.
Top! Union was exact wat ik zocht. Dank u.quote:Op donderdag 6 december 2007 00:12 schreef SuperRembo het volgende:
[..]
Dan moet je gewoon een union / union all gebruiken.
Als je zowel de laatste 5 toevoegingen en de laatste 5 wijzigingen wilt zien dan heb je minimaal 2 queries nodig, omdat je niet kunt sorteren op 2 dingen. Als je een toevoeging ook als een wijziging beschouwt (en bij toevoegen dus wijzigdatum en toevoegdatum gelijk maakt) dan kun je met 1 query toe.quote:Op woensdag 5 december 2007 21:59 schreef Geqxon het volgende:
Ik kan natuurlijk in een loop gaan werken, maar ik vind het het mooist om zo veel als mogelijk in de query te doen, en dat in één keer in een array te stoppen. Of kan dit niet?
Het totaalproduct, mocht dat het duidelijker maken. Het product van drie (in de applicatie vijftien) verschillende queries:quote:Op donderdag 6 december 2007 00:31 schreef Light het volgende:
[..]
Als je zowel de laatste 5 toevoegingen en de laatste 5 wijzigingen wilt zien dan heb je minimaal 2 queries nodig, omdat je niet kunt sorteren op 2 dingen. Als je een toevoeging ook als een wijziging beschouwt (en bij toevoegen dus wijzigdatum en toevoegdatum gelijk maakt) dan kun je met 1 query toe.
Hoe je bij 15 queries komt is me niet helemaal duidelijk.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | | Description | Date | +-----------------------------------+------------+ | Added client x to company y | 05-12-2007 | | Added client a to company y | 04-12-2007 | | Added client d to company y | 03-12-2007 | | Added client c to company y | 02-12-2007 | | Added client b to company z | 02-12-2007 | | Added company y | 01-12-2007 | | Added company ... | 30-10-2007 | | Added company ... | 30-10-2007 | | Added company ... | 11-07-2007 | | Added company ... | 05-03-2007 | | Changed information on company y | 02-12-2007 | +-----------------------------------+------------+ |
1 2 3 4 | $query = mysql_query("SELECT * FROM vrijwilligers_gegevens WHERE YEAR(datum) = YEAR('$jaar') AND geslacht = '$geslacht' AND nationaliteit = '$nationaliteit' AND YEAR(geboortedatum) = YEAR('$geboortedatum')"); ?> |
1 2 3 4 5 6 7 8 9 | if(isset($year)){ $query_where.=" AND year(datum)='".mysql_real_escape_string($year)."'"; } if(isset($geslacht)){ $query_where.=" AND geslacht='".mysql_real_escape_string($geslacht)."'"; } $query=mysql_query("SELECT * FROM vrijwilligers_gegevens WHERE bla=bla".$query_where); ?> |
Klopt, die van mij had nog iets beter gekundquote:Op woensdag 5 december 2007 14:13 schreef autocue het volgende:
[..]
Het kan in ieder geval ietsje korter. Qua snelheid zou de volgende het denk ik moeten winnen, maar niet omdat het écht efficienter is.
[ code verwijderd ]
Als het overigens relatief vaak voorkomt dat een stuk tekst geen 'spatie kolom' heeft, dan zou jouw aanpak een stuk sneller kunnen worden (en zijn dan deze) wanneer je stopt met zoeken bij het vinden van een regel met $inMin == 0.
Vraagje; hoe zou je kunnen controlleren of een regel leeg is? in de zin van er zit een enter in je codequote:Op woensdag 5 december 2007 14:13 schreef autocue het volgende:
[..]
Het kan in ieder geval ietsje korter :P. Qua snelheid zou de volgende het denk ik moeten winnen, maar niet omdat het écht efficienter is.
[ code verwijderd ]
Als het overigens relatief vaak voorkomt dat een stuk tekst geen 'spatie kolom' heeft, dan zou jouw aanpak een stuk sneller kunnen worden (en zijn dan deze) wanneer je stopt met zoeken bij het vinden van een regel met $inMin == 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | moi hoi lol test test test tes hello world moi hoi lol test test test tes"; |
Wat dan als er alleen een spatie op een regel staat, dan matcht ie al niet meer maar het is wel een lege regel.quote:Op donderdag 6 december 2007 20:47 schreef HuHu het volgende:
Matchen op een dubbele \n, dus \n\n.
Ik heb uit mijn css een regeltje bovenaan weggehaald waar iets over utf-8 stond.. Dat heb ik er uit gehaald. Nu zie ik geen problemen meer.quote:Op woensdag 5 december 2007 11:30 schreef JortK het volgende:
[..]
Dat wordt volgens mij een lastig verhaal
Door (bijvoorbeeldquote:Op donderdag 6 december 2007 20:17 schreef Chandler het volgende:
[..]
Vraagje; hoe zou je kunnen controlleren of een regel leeg is? in de zin van er zit een enter in je code
(voorbeeld)
[ code verwijderd ]
Nu zie je opeens een 'lege' regel.. die moet je dus overslaan? maar hoe kan ik die afvangen?
";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function ltrimSpaceColumns($in) { if(preg_match_all('|^( *)\S|m', $in, $matches)) { $min = 0x7fffffff; while(($pair = each($matches[1])) && $min > 0) { if(($newMin = strlen($pair[1])) < $min) { $min = $newMin; } } if($min > 0) { $in = preg_replace('|^ {'.$min.'}|m', '', $in); } } return $in; } ?> |
Werkt idd helemaal perfect, nu heb ik nog 1 andere vraag.quote:Op vrijdag 7 december 2007 00:41 schreef autocue het volgende:
[..]
Door (bijvoorbeeld) te forceren dat de matches waarbij de lengte van de whitespace gecheckt wordt niet enkel whitespace is. Er zal dus een niet whitespace karakter moeten volgen na de spaties, dus alleen de regex zal aangepast moeten worden en er moet verwezen worden naar een andere matching groep (namelijk die voor de spaties). Zoals volgt ongeveer
.
[ code verwijderd ]
Daar zou ik dan maar eens wat aan doen, een programmeur kan niet zonder.quote:Op vrijdag 7 december 2007 10:37 schreef Chandler het volgende:
* Chandler verstopt zich, snapt amper een bal van regex...
Post eens wat goede danquote:Op vrijdag 7 december 2007 11:05 schreef Farenji het volgende:
[..]
Daar zou ik dan maar eens wat aan doen, een programmeur kan niet zonder.
Er zijn zat tutorials te vinden.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |