Voor het geval je er nog niet uit bent.quote:Op vrijdag 9 september 2011 20:29 schreef MrNiles het volgende:
[..]
dat heb ik dus gedaan..maar ik ben ff de draad kwijt
| 1 2 3 | <?php echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> '; ?> |
het is min of meer geluktquote:Op zaterdag 10 september 2011 02:10 schreef boem-dikkie het volgende:
[..]
Voor het geval je er nog niet uit bent.
".$album."/thumbs/klein_".$files[$rand]. "
Kijk daar nog eens goed naar.
Je sluit je stukje php met " waardoor /thumbs/klein_ nergens meer tussen staat.
Dit moet wel werken denk ik.
[ code verwijderd ]
ik vraag er toch ook niet om, leg alleen even uit waar ik mee bezig benquote:Op zondag 11 september 2011 21:03 schreef Tegan het volgende:
Wij kunnen het wel weer voorkauwen maar wellicht kun je het hele project beter uitbesteden.
Wat voor aangepast script wat erbij stond?quote:Op zondag 11 september 2011 20:58 schreef MrNiles het volgende:
[..]
het is min of meer gelukt
alle foutmeldingen zijn verdwenen maar het script doet niet wat ik had gehoopt
http://www.phphulp.nl/php(...)h-fotoalbum-v3/1491/ is een fotoalbum die vanuit mapjes zelf "sub"albums aanmaakt
werkt prima
maar
op de voorbeeld pagina is het de overzichtspagina met linkjes EN plaatjes. In het script van phphulp heb ik alleen linkjes
Ik had gehoopt met een aangepast script wat erbij stond dit te kunnen maken..maar helaas..
ook gaat mijn php kennis lang niet vergenoeg om zoiets zelf te maken
Wat is GD? (edit: GD support = enabled)quote:Op zondag 11 september 2011 21:16 schreef KomtTijd... het volgende:
Heb je wellicht GD niet geinstalleerd staan? [/wilde suggestie]
En waarom maak je niet gewoon lekker een picasa-album ofzo?
| 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 // Nieuw Nieuw Nieuw Nieuw // $exts = 'jpg jpeg png gif'; $files = array(); $i = - 1; if ('' == $album) $album = './'; $handle = opendir($album); $exts = explode(' ', $exts); while (false !== ($file = readdir($handle))) { foreach ($exts as $ext) { if (preg_match('/\.' . $ext . '$/i', $file, $test)) { $files[] = $file; ++$i; } } } closedir($handle); mt_srand((double) microtime() * 1000000); $rand = mt_rand(0, $i); // Eind Eind Eind Eind Eind // echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> '; echo '<a href='?pagina=fotoalbum&album=' . $album . ''>' . ucfirst(basename($album)) . '</a><br><br />' . PHP_EOL; ?> |
quote:Op donderdag 15 september 2011 12:04 schreef Catbert het volgende:
Ik vermoed dat 'ie een overzicht wil tonen van alle relaties met de omzet daarbij. Als hij geen index heeft op het veld wat die informatie bevat in de grote tabel zal 'ie voor iedere rij uit zo'n overzicht iedere keer die hele tabel door moeten ploegen.
Dan heb je niet de juiste indices geplaatst.quote:Op donderdag 15 september 2011 10:32 schreef wdn het volgende:
Maar zelfs met `indexering` op de tabel is het veel en veels te langzaam (30+ secondes) om alles bij elkaar te rapen.
Wat een snelle conclusie, een kenner?quote:Op donderdag 15 september 2011 12:30 schreef Tijn het volgende:
[..]
Dan heb je niet de juiste indices geplaatst.
Als er verder geen informatie wordt gegeven, kun je verder niet zoveel zeggen dan "je hebt het verkeerd gedaan"quote:Op donderdag 15 september 2011 12:43 schreef GlowMouse het volgende:
[..]
Wat een snelle conclusie, een kenner?
Ik heb net query gemaakt en gekeken met explain wat hij toevoegt, maar ik zie wat hij doet, maar niet waar hoeveel tijd inging zitten en hoeveel percentage de belasting van een onderdeel was. Zou wel tof zijn als hij zegt dat een bepaalde join 60% van de belasting vraagt en dat je daar kunt beginnen voor verbetering.quote:Op donderdag 15 september 2011 14:02 schreef Intrepidity het volgende:
Probeer eens een 'explain' voor je query te gooien om te kijken waar prestatiewinst te behalen valt.
http://dev.mysql.com/doc/refman/5.0/en/explain.html
MySQL geeft echt weinig informatiequote:Op donderdag 15 september 2011 14:45 schreef Catbert het volgende:
Je weet niks als hij niet post welke indices hij heeft.
De MSSQL query explain geeft overigens gewoon aan hoe zwaar een bepaald deel is.
| 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 | /* Drop stored procedure task_generate_sales_invoice first. */ if exists (select 1 from sysobjects where name = 'task_generate_sales_invoice' and type = 'P') drop procedure task_generate_sales_invoice go create procedure task_generate_sales_invoice ( @until_date date , @customer_id id ) as begin -- Do not count affected rows for performance SET NOCOUNT ON -- Generate sales invoice insert into sales_invoice select isnull((select max(sales_invoice_no) + 1 from sales_invoice), 1), customer_id, getdate(), dateadd(day, 30, getdate()), 0, 0, 0 from customer c where c.customer_id = @customer_id and exists (select 1 from hour h join project p on (p.project_id = h.project_id) where h.sales_invoice_id is null and p.customer_id = c.customer_id) -- Connect hours to sales invoice. update h set sales_invoice_id = (select max(sales_invoice_id) from sales_invoice i where i.customer_id = p.customer_id) from hour h join project p on (p.project_id = h.project_id) where h.sales_invoice_id is null and p.customer_id = @customer_id and h.date <= @until_date end go |
| 1 2 | Msg 213, Level 16, State 1, Procedure task_generate_sales_invoice, Line 16 Insert Error: Column name or number of supplied values does not match table definition. |
Kolomnaam volgens mij.quote:Op vrijdag 16 september 2011 16:05 schreef ViPeRII het volgende:
Een van je tabelnamen die geselecteerd worden, bestaat niet
Onzin. Echt.quote:Op donderdag 15 september 2011 12:30 schreef Tijn het volgende:
[..]
Dan heb je niet de juiste indices geplaatst.
Nee, de index staat op de relatie natuurlijk (als ik die niet zet gaat mysql onderuitquote:Op donderdag 15 september 2011 12:04 schreef Catbert het volgende:
Ik vermoed dat 'ie een overzicht wil tonen van alle relaties met de omzet daarbij. Als hij geen index heeft op het veld wat die informatie bevat in de grote tabel zal 'ie voor zo'n overzicht iedere keer die hele tabel door moeten ploegen.
Idee om je factuur historie tabel te gaan sharden? Dat zou de boel een stuk moeten versnellen.quote:Op vrijdag 16 september 2011 17:13 schreef wdn het volgende:
[..]
Onzin. Echt.
[..]
Nee, de index staat op de relatie natuurlijk (als ik die niet zet gaat mysql onderuit).
Het is puur de hoeveelheid data (op dit moment 12.3 miljoen records) en hoeveelheid geheugen die ik kan gebruiken.
Maar uit de discussie hier kan ik al bepalen dat mijn vraag met 'nee' beantwoord moet worden: stored procedures is niet de oplossing.
relaties kent een 1500 records.
factuur historie 12.3m records.
factuur historie wordt op bedrijf, debiteur, contract factuur, regel doorlopen (en dat is de volledige primary key met debiteur ertussen). Geforceerd met een USE INDEX.
Ik had het idee om een soort van afgeleide tabel boven op deze tabel te leggen (met een PK bedrijf, debiteur, jaar, omzet).
| 1 2 3 4 5 | if($pages >= 1 && $page <= $pages){ for ($x=1; $x<=$pages; $x++) { echo ($x == $page) ? "<strong><a href='/nieuws/overzicht&page=".$x."'>".$x."</a></strong> " : "<a href='/nieuws/overzicht&page=".$x."'>".$x."</a> "; } } |
Dat is erg inefficiënt, je kunt beter in die for-loop $x in 1x flink ophogen als je bij de puntjes aanbelandt.quote:Op zondag 18 september 2011 18:53 schreef Tijn het volgende:
Gewoon een ifje in je for-loop die kijkt of $x kleiner is dan 3 en een ifje die kijkt of $x groter is dan $pages - 3 toch?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | if($pages >= 1 && $page <= $pages){ if($page >= 2){ $nextpage = $page+1; $previouspage = $page-1; if($page == $pages){ echo "<a href='overzicht&page=1'>Eerste</a> | <a href='overzicht&page=$previouspage'>Vorige</a> <strong>...<a href='overzicht&page=$page'>$page</a></strong>"; } else{ echo "<a href='overzicht&page=1'>Eerste</a> | <a href='overzicht&page=$previouspage'>Vorige</a> <strong>...<a href='overzicht&page=$page'>$page</a>...</strong> <a href='overzicht&page=".$nextpage."'>Volgende</a> | <a href='overzicht&page=$pages'>Laatste</a>"; } } else{ $nextpage = $page+1; echo "<strong><a href='overzicht&page=$page'> $page</a>...</strong> <a href='overzicht&page=".$nextpage."'>Volgende</a> | <a href='overzicht&page=$pages'>Laatste</a>"; } } |
| 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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | <?php /** * * Format base_url: 'pages.php?id=1&start=%d' * The %d string is for the count element * * Decoration array parameters * - param: Boolean $add_prevnext_text * - param: String $selected_format * - param: String $base_url_html * - param: String $spacer * - param: String $breaker * * @param String $base_url * @param Integer $num_items * @param Integer $per_page * @param Integer $start_item * @param Array $add_prevnext_text * @return String */ function GeneratePagination($base_url, $num_items, $per_page, $start_item, $decoration = array()) { $add_prevnext_text = false; $selected_format = '<b>%d</b>'; $base_url_html = sprintf('<a href="%s">%s</a>', $base_url, '%s'); $spacer = ' '; $breaker = ' ... '; $previous_text = 'Previous'; $next_text = 'Next'; if ( $num_items == 0 ) { throw new Exception('mag geen 0 zijn want die kun je niet delen door een getal.'); } if ( isset($decoration['add_prevnext_text']) === true ) { $add_prevnext_text = true; } if ( isset($decoration['previous_text']) === true ) { $previous_text = $decoration['previous_text']; } if ( isset($decoration['next_text']) === true ) { $next_text = $decoration['next_text']; } if ( isset($decoration['selected_format']) === true ) { $selected_format = $decoration['selected_format']; } if ( isset($decoration['base_url_html']) === true ) { $base_url_html = sprintf($decoration['base_url_html'], $base_url, '%s'); } if ( isset($decoration['spacer']) === true ) { $spacer = $decoration['spacer']; } if ( isset($decoration['breaker']) === true ) { $breaker = $decoration['breaker']; } $total_pages = ceil($num_items/$per_page); if ( $total_pages == 1 ) { return ''; } $on_page = floor($start_item / $per_page) + 1; $page_string = ''; if ( $total_pages > 10 ) { $init_page_max = ( $total_pages > 3 ) ? 3 : $total_pages; for($i = 1; $i < $init_page_max + 1; $i++) { $page_string .= ( $i == $on_page ) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( ( $i - 1 ) * $per_page ), $i); if ( $i < $init_page_max ) { $page_string .= $spacer; } } if ( $total_pages > 3 ) { if ( $on_page > 1 && $on_page < $total_pages ) { $page_string .= ( $on_page > 5 ) ? $breaker : $spacer; $init_page_min = ( $on_page > 4 ) ? $on_page : 5; $init_page_max = ( $on_page < $total_pages - 4 ) ? $on_page : $total_pages - 4; for($i = $init_page_min - 1; $i < $init_page_max + 2; $i++) { $page_string .= ($i == $on_page) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( ( $i - 1 ) * $per_page ), $i); if ( $i < $init_page_max + 1 ) { $page_string .= $spacer; } } $page_string .= ( $on_page < $total_pages - 4 ) ? $breaker : $spacer; } else { $page_string .= $breaker; } for($i = $total_pages - 2; $i < $total_pages + 1; $i++) { $page_string .= ( $i == $on_page ) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( ( $i - 1 ) * $per_page ), $i); if( $i < $total_pages ) { $page_string .= $spacer; } } } } else { for( (int) $i = 1; $i < $total_pages + 1; $i++ ) { $page_string .= ( $i == $on_page ) ? sprintf($selected_format, $i) : sprintf($base_url_html, ( $i - 1 ) * $per_page, $i); if ( $i < $total_pages ) { $page_string .= $spacer; } } } if ( $add_prevnext_text ) { if ( $on_page > 1 ) { $page_string = sprintf($base_url_html, ( $on_page - 2 ) * $per_page, $previous_text) . ' ' . $page_string; } if ( $on_page < $total_pages ) { $page_string .= (string) ' ' . sprintf($base_url_html, $on_page * $per_page, $next_text); } } return $page_string; } ?> |
Ik vindquote:Op zondag 18 september 2011 22:30 schreef ralfie het volgende:
isset($decoration['breaker']) === true
isset poept toch alleen maar true of false? waarom die === true ?
| 1 2 3 | <?php if( functie($parameter) === true ) { } ?> |
| 1 2 3 | <?php if( functie($parameter)) { } ?> |
Bij isset() is dat nutteloos want die returned sowieso alleen true of false.quote:Op maandag 19 september 2011 07:47 schreef Pakspul het volgende:
En de === i.p.v. de == die gebruikelijk is in een statement: http://www.php.net/manual/en/language.operators.comparison.php. Die controleert ook of het type hetzelfde is.
En dan komt reden 1 om de hoek kijkenquote:Op maandag 19 september 2011 08:17 schreef mstx het volgende:
[..]
Bij isset() is dat nutteloos want die returned sowieso alleen true of false.
Bedanktquote:Op dinsdag 20 september 2011 11:19 schreef GlowMouse het volgende:
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
Geen COUNT(*) maar COUNT(id) doen. Bij * pakt hij de index niet meequote:Op dinsdag 20 september 2011 11:19 schreef GlowMouse het volgende:
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
Oja het moet inderdaad een count zijn, foutje.quote:Op dinsdag 20 september 2011 11:19 schreef GlowMouse het volgende:
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
COUNT(*) is exact hetzelfde als COUNT(kolom die NOT NULL is)quote:Op dinsdag 20 september 2011 11:22 schreef Intrepidity het volgende:
[..]
Geen COUNT(*) maar COUNT(id) doen. Bij * pakt hij de index niet mee
En de GROUP BY is ook op een andere tabel, anders krijg je producten met 0 bestellingen niet te zien.quote:Op dinsdag 20 september 2011 11:22 schreef mstx het volgende:
[..]
Oja het moet inderdaad een count zijn, foutje.
Klopt, maar toch pakt hij een eventuele index niet mee tenzij je expliciet een kolom met index specificeert. MySQL is een hacky stuk code. Zolang je gewoon de PK in een COUNT gebruikt is er niets aan het handjequote:Op dinsdag 20 september 2011 11:34 schreef GlowMouse het volgende:
[..]
COUNT(*) is exact hetzelfde als COUNT(kolom die NOT NULL is)
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |