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 onderuit ).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 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.
Bedankt ik was alleen vergeten het in een while loop te gooien waardoor ik maar 1 resultaat kreeg. Had al dezelfde query als jou gebouwdquote: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: |