abonnement Unibet Coolblue
  vrijdag 16 september 2011 @ 16:12:34 #226
58834 Catbert
The evil HR Director.
pi_102020948
quote:
0s.gif Op vrijdag 16 september 2011 16:05 schreef ViPeRII het volgende:
Een van je tabelnamen die geselecteerd worden, bestaat niet
Kolomnaam volgens mij.
"[...] a large number of the teenagers claiming Asperger's are, in fact, merely dicks."
  vrijdag 16 september 2011 @ 16:16:28 #227
267443 Cue_
Cuecumbergirl
pi_102021104
de kolommen/tabellen komen overeen met het datamodel
  vrijdag 16 september 2011 @ 17:13:51 #228
107418 wdn
Elfen lied O+
pi_102023207
quote:
3s.gif Op donderdag 15 september 2011 12:30 schreef Tijn het volgende:

[..]

Dan heb je niet de juiste indices geplaatst.
Onzin. Echt.
quote:
0s.gif 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.
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).
Beatus vir qui suffert tentationem.
PSN Rinzewind
Disgaea 5 *O* Horizon Zero Dawn *O* Nier Automata *O* Persona 5 *O*
pi_102023251
quote:
0s.gif 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).
Idee om je factuur historie tabel te gaan sharden? Dat zou de boel een stuk moeten versnellen.
pi_102096658
Ik gebruik op dit moment voor m'n website een paging system:

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>  ";
            }
        }

Alleen er zijn nu zoveel pagina's dat de hele pagina wordt gevuld ermee. Nu heb ik zitten denken hoe ik ervoor kan zorgen dat ik '1 2 3 ... 30 31 32' krijg (of iets dergelijks), maar ik kom er niet uit.

Iemand die mij kan helpen?
pi_102103415
Just say hi!
  zondag 18 september 2011 @ 18:53:57 #232
12221 Tijn
Powered by MS Paint
pi_102106592
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?
pi_102107009
Ik ga eens even kijken naar een if statement :)
  zondag 18 september 2011 @ 19:29:14 #234
75592 GlowMouse
l'état, c'est moi
pi_102107880
quote:
5s.gif 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?
Dat is erg inefficiënt, je kunt beter in die for-loop $x in 1x flink ophogen als je bij de puntjes aanbelandt.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_102110569
Het is me nu gelukt op de volgende manier;
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>";
            }
        }
pi_102114805
Tijdje geleden heb ik een functie geschreven dit tot de dag van vandaag nog goed te gebruiken is. Volledig aanpasbaar door opgeven van parameters en hij poept netjes de pagina string uit.
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 == )
    {
        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 == )
    {
        return 
'';
    }

    
$on_page floor($start_item $per_page) + 1;

    
$page_string '';
    if ( 
$total_pages 10 )
    {
        
$init_page_max = ( $total_pages ) ? $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 ) * $per_page ), $i);
            if ( 
$i <  $init_page_max )
            {
                
$page_string .= $spacer;
            }
        }

        if ( 
$total_pages )
        {
            if ( 
$on_page && $on_page $total_pages )
            {
                
$page_string .= ( $on_page ) ? $breaker $spacer;

                
$init_page_min = ( $on_page ) ? $on_page 5;
                
$init_page_max = ( $on_page $total_pages ) ? $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 ) * $per_page ), $i);
                    if ( 
$i <  $init_page_max )
                    {
                        
$page_string .= $spacer;
                    }
                }

                
$page_string .= ( $on_page $total_pages ) ? $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 ) * $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 ) * $per_page$i);
            
            if ( 
$i $total_pages )
            {
                
$page_string .= $spacer;
            }
        }
    }

    if ( 
$add_prevnext_text )
    {
        if ( 
$on_page )
        {
            
$page_string sprintf($base_url_html, ( $on_page ) * $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;
}
?>


:)
  zondag 18 september 2011 @ 22:30:24 #237
85514 ralfie
!Yvan eht nioj
pi_102120910
isset($decoration['breaker']) === true

isset poept toch alleen maar true of false? waarom die === true ?
  zondag 18 september 2011 @ 23:58:08 #238
12221 Tijn
Powered by MS Paint
pi_102125902
Met een beetje geluk mag ik binnenkort een applicatie gaan schrijven die mailtjes moet importeren uit een POP3 mailbox (dmv van de imap-functies) en data moet exporteren naar iCalender voor gebruik in Google Calender en Apple iCal. Best tof lijkt me, want het zijn allebei dingen die ik nog nooit gedaan heb, maar volgens mij ook niet supermoeilijk te bouwen zijn :)
pi_102129656
quote:
5s.gif 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 ?
Ik vind
1
2
3
<?php
if( functie($parameter) === true ) { }
?>
fijner lezen als
1
2
3
<?php
if( functie($parameter)) { }
?>

Maar dat is persoonlijk :P 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.
  maandag 19 september 2011 @ 08:17:27 #240
91039 mstx
2x1/2 = 1/2 x 1/2
pi_102129952
quote:
0s.gif 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.
Bij isset() is dat nutteloos want die returned sowieso alleen true of false.
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
pi_102129964
quote:
0s.gif Op maandag 19 september 2011 08:17 schreef mstx het volgende:

[..]

Bij isset() is dat nutteloos want die returned sowieso alleen true of false.
En dan komt reden 1 om de hoek kijken :P
  dinsdag 20 september 2011 @ 11:14:15 #242
37634 wobbel
Da WoBBeL King
pi_102173640
Ik heb een tabel met producten, en een tabel met verkocht.

Tabel "producten"
1 | Product A | 25,-
2 | Product B | 100,-
3 | Product C | 33,-

Tabel "verkocht"
1 | 25-8-2011
1 | 26-8-2011
1 | 27-8-2011
2 | 27-8-2011
2 | 28-8-2011
3 | 25-8-2011

Hoe krijg ik nu een overzicht hoeveel producten er verkocht zijn van elk?

Dus ongeveer dit:

Product A | 3x
Product B | 2x
Product C | 1x
  dinsdag 20 september 2011 @ 11:16:34 #243
91039 mstx
2x1/2 = 1/2 x 1/2
pi_102173690
SELECT producten.naam, SUM(*) FROM verkocht LEFT JOIN producten ON verkocht.pro_id=producten.pro_id GROUP BY verkocht.pro_id

zoiets?
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
  dinsdag 20 september 2011 @ 11:19:16 #244
75592 GlowMouse
l'état, c'est moi
pi_102173768
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  dinsdag 20 september 2011 @ 11:22:32 #245
37634 wobbel
Da WoBBeL King
pi_102173845
quote:
3s.gif 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
Bedankt :) ik was alleen vergeten het in een while loop te gooien waardoor ik maar 1 resultaat kreeg. Had al dezelfde query als jou gebouwd :')

Array
(
[Naam] => Draytek Vigor 2710N-A
[Aantal] => 1
)
Array
(
[Naam] => EnGenius M36
[Aantal] => 1
)
Array
(
[Naam] => Draytek Vigor 2820N-A
[Aantal] => 2
)
pi_102173858
quote:
3s.gif 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 mee ;)
  dinsdag 20 september 2011 @ 11:22:59 #247
91039 mstx
2x1/2 = 1/2 x 1/2
pi_102173860
quote:
3s.gif 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. :P
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
  dinsdag 20 september 2011 @ 11:34:47 #248
75592 GlowMouse
l'état, c'est moi
pi_102174170
quote:
0s.gif Op dinsdag 20 september 2011 11:22 schreef Intrepidity het volgende:

[..]

Geen COUNT(*) maar COUNT(id) doen. Bij * pakt hij de index niet mee ;)
COUNT(*) is exact hetzelfde als COUNT(kolom die NOT NULL is)
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  dinsdag 20 september 2011 @ 11:35:20 #249
75592 GlowMouse
l'état, c'est moi
pi_102174184
quote:
0s.gif Op dinsdag 20 september 2011 11:22 schreef mstx het volgende:

[..]

Oja het moet inderdaad een count zijn, foutje. :P
En de GROUP BY is ook op een andere tabel, anders krijg je producten met 0 bestellingen niet te zien.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_102174230
quote:
0s.gif Op dinsdag 20 september 2011 11:34 schreef GlowMouse het volgende:

[..]

COUNT(*) is exact hetzelfde als COUNT(kolom die NOT NULL is)
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 handje :)
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')