abonnement Unibet Coolblue Bitvavo
  Moderator / Redactie Sport / Devops dinsdag 15 april 2014 @ 17:27:52 #51
176766 zoem
zoemt
pi_138912326
Extenden met een eigen exception class?
  FOK!mycroftheld dinsdag 15 april 2014 @ 17:38:55 #52
128465 verified  bondage
Ingewikkeld
pi_138912744
quote:
0s.gif Op dinsdag 15 april 2014 17:27 schreef zoem het volgende:
Extenden met een eigen exception class?
Die mogelijkheid had ik al iets over gevonden, ik kwam echter niets tegen over het omzetten van de array naar een string en kon daardoor lastig een conclusie trekken wat beter zou zijn. Jij zou dus voor extenden gaan als ik het goed begrijp.
  Moderator / Redactie Sport / Devops dinsdag 15 april 2014 @ 17:53:26 #53
176766 zoem
zoemt
pi_138913212
Ik ken de context ook verder niet, maar dit kwam als eerste in me op.
  FOK!mycroftheld dinsdag 15 april 2014 @ 17:56:09 #54
128465 verified  bondage
Ingewikkeld
pi_138913282
Ik ga hem extenden. Is het onderscheid ook duidelijker.
  dinsdag 15 april 2014 @ 21:26:04 #55
187069 slacker_nl
Sicko pur sang
pi_138922370
In theory there is no difference between theory and practice. In practice there is.
  woensdag 16 april 2014 @ 08:46:23 #56
25889 Sitethief
Fulltime Flapdrol
pi_138933114
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." - Kernighan's Law

_O- .
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht >:)
pi_138938884
quote:
11s.gif Op dinsdag 15 april 2014 17:23 schreef bondage het volgende:
Is dit netjes om te doen?
[ code verwijderd ]

Het is namelijk niet mogelijk om een array aan een exception mee te geven en ik moet meerdere parameters aan de uiteindelijke foutmelding toe kunnen voegen.

Zo niet; is er een andere manier om dit te fixen?
Dan schrijf je toch je eigen error handler die dat wel aan kan?
  FOK!mycroftheld woensdag 16 april 2014 @ 13:13:28 #58
128465 verified  bondage
Ingewikkeld
pi_138939774
quote:
0s.gif Op woensdag 16 april 2014 12:42 schreef totalvamp het volgende:

[..]

Dan schrijf je toch je eigen error handler die dat wel aan kan?
Allang gedaan *)
pi_138939802
quote:
14s.gif Op woensdag 16 april 2014 13:13 schreef bondage het volgende:

[..]

Allang gedaan *)
Geen code om te tonen dan :P?
  FOK!mycroftheld woensdag 16 april 2014 @ 13:49:21 #60
128465 verified  bondage
Ingewikkeld
pi_138941012
quote:
0s.gif Op woensdag 16 april 2014 13:14 schreef totalvamp het volgende:

[..]

Geen code om te tonen dan :P?
Nu niet, ben nu op kantoor.
  FOK!mycroftheld woensdag 16 april 2014 @ 23:39:25 #61
128465 verified  bondage
Ingewikkeld
pi_138965279
Hierbij

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
class statsOutputException extends Exception {
    private 
$error_id 0;          # intern numeriek id van de fout
    
private $error_vars = array();  # array met fout eigenschappen
    
    
public function __construct($error_params$code 0Exception $previous null) {
        
# check of het een array met waarden betreft
        
if(is_array($error_params)) {
            
$this->error_id = isset($error_params['id']) ? $error_params['id'] : null;
            
$this->error_vars = (isset($error_params['vars']) && is_array($error_params['vars'])) ? $error_params['vars'] : array();
        }else{
            
# input is string of int, handel op de normale manier af
            
$this->error_id $error_params;
        }
        
        
# roep Exception contructor aan
        
parent::__construct($this->error_id$code$previous);
    }
    
    
# geeft de vars terug welke de foutcode aanvullen met eventuele extra gegevens
    
public function getErrorVars() {
        return 
$this->error_vars;
    }
}
?>
  vrijdag 18 april 2014 @ 11:06:51 #62
37634 wobbel
Da WoBBeL King
pi_139006234
Help :P ik heb weer eens iets raars nodig. Het is mij ooit al gelukt, maarja waarom zou je zoiets dan bewaren.

Vanaf een leverancier wordt er naar ons XML gepusht (dmv POST) naar http://server.tld/test.php. Dit gebeurd zonder variable naam.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml_version "1.0" encoding="UTF-8" ?>
        <message>
                <messageheader>
                        <debug>false</debug>
                        <msgtype>incoming</msgtype>
                        <msgversion>1.0</msgversion>
                        <msgidentifier></msgidentifier>
                        <errorcode>0</errorcode>
                        <errorcodedescription>ok</errorcodedescription>
                        <msgdatetime>2014-04-18T11:02:55</msgdatetime>
                </messageheader>
                <messagebody>
                        <clip>200</clip>
                        <did></did>
                        <extension>200</extension>
                        <prefix>Roy</prefix>
                </messagebody>
        </message>

Hoe kan ik dit met PHP afvangen? Een foreach met alle POSTS vars blijft angstvallig leeg.
Als ik de contents van phpinfo(); naar mijzelf mail krijg ik het volgende:



Dit wil zeggen dat ik met $_POST['<?xml_version'] wel de data op zou kunnen halen, en er later weer '<?xml_version' voor kan plakken maar helemaal netjes lijkt het mij niet.
  vrijdag 18 april 2014 @ 11:11:44 #63
91039 mstx
2x1/2 = 1/2 x 1/2
pi_139006353
quote:
0s.gif Op vrijdag 18 april 2014 11:06 schreef wobbel het volgende:
Help :P ik heb weer eens iets raars nodig. Het is mij ooit al gelukt, maarja waarom zou je zoiets dan bewaren.

Vanaf een leverancier wordt er naar ons XML gepusht (dmv POST) naar http://server.tld/test.php. Dit gebeurd zonder variable naam.
[ code verwijderd ]

Hoe kan ik dit met PHP afvangen? Een foreach met alle POSTS vars blijft angstvallig leeg.
file_get_contents("php://input") ?
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.
👾
  vrijdag 18 april 2014 @ 11:20:00 #64
37634 wobbel
Da WoBBeL King
pi_139006551
quote:
0s.gif Op vrijdag 18 april 2014 11:11 schreef mstx het volgende:

[..]

file_get_contents("php://input") ?
_O_ dat was 't!!! Me love u long time
pi_139097005
Ik ben op zoek naar een PHP library waarmee ik een soort mini-forumpje kan maken, zonder veel poespas, zoals phpBB.

Een beetje dit idee:



Ik wil het gebruiken als een soort berichtenprikbord waar iedereen berichtjes op kan plaatsen. Dus geen commentsystem.
pi_139098911
Moet je beter zoeken. Er zijn echt volop van dit soort dingen. :)
pi_139102129
Succes!
  maandag 21 april 2014 @ 09:34:11 #68
12221 Tijn
Powered by MS Paint
pi_139102315
quote:
0s.gif Op zondag 20 april 2014 23:56 schreef pascal08 het volgende:
Ik ben op zoek naar een PHP library waarmee ik een soort mini-forumpje kan maken, zonder veel poespas, zoals phpBB.

Een beetje dit idee:

[ afbeelding ]

Ik wil het gebruiken als een soort berichtenprikbord waar iedereen berichtjes op kan plaatsen. Dus geen commentsystem.
Waarom gebruik je niet gewoon Disqus zelf?
  FOK!-Schrikkelbaas maandag 21 april 2014 @ 09:35:46 #69
1972 Swetsenegger
Egocentrische Narcist
pi_139102334
Dus eigenlijk wil je een gastenboek?
pi_139110219
quote:
5s.gif Op maandag 21 april 2014 09:35 schreef Swetsenegger het volgende:
Dus eigenlijk wil je een gastenboek?
Ongeveer wel ja.
pi_139110332
quote:
5s.gif Op maandag 21 april 2014 09:34 schreef Tijn het volgende:

[..]

Waarom gebruik je niet gewoon Disqus zelf?
Omdat daar een heel gebeuren aan vastzit wat ik helemaal niet nodig heb.
  maandag 21 april 2014 @ 21:45:15 #72
12221 Tijn
Powered by MS Paint
pi_139126974
quote:
0s.gif Op maandag 21 april 2014 15:08 schreef pascal08 het volgende:

[..]

Omdat daar een heel gebeuren aan vastzit wat ik helemaal niet nodig heb.
Valt wel mee toch? Gewoon een accountje maken, includen op de pagina waar je het hebben wil en klaar is kees :)
  dinsdag 22 april 2014 @ 09:03:13 #73
166255 Maringo
Bèhèhèhèh
pi_139137550
quote:
5s.gif Op maandag 21 april 2014 21:45 schreef Tijn het volgende:

[..]

Valt wel mee toch? Gewoon een accountje maken, includen op de pagina waar je het hebben wil en klaar is kees :)
Accountje aanmaken is voor veel mensen een dergelijke grote stap dat ze het maat laten zitten. Leuk voorbeeld is de case van Amazon die het account aanmaken niet meer verplicht stelde vooraf de aankoop.
Die volg topic-knop hè...
Op 02-06-2014 16:38 schreef Moeraskat
Je bent te goed voor de mensheid.
  dinsdag 22 april 2014 @ 09:18:37 #74
12221 Tijn
Powered by MS Paint
pi_139137797
quote:
1s.gif Op dinsdag 22 april 2014 09:03 schreef Maringo het volgende:

[..]

Accountje aanmaken is voor veel mensen een dergelijke grote stap dat ze het maat laten zitten. Leuk voorbeeld is de case van Amazon die het account aanmaken niet meer verplicht stelde vooraf de aankoop.
Ik bedoelde de moeite die het kost om het te installeren. Reageren kan volgens mij ook zonder account.
pi_139155907
quote:
5s.gif Op maandag 21 april 2014 21:45 schreef Tijn het volgende:

[..]

Valt wel mee toch? Gewoon een accountje maken, includen op de pagina waar je het hebben wil en klaar is kees :)
Dat is gewoon niet wat ik zoek. Ik heb zelf inmiddels al een code geschreven. Kostte uiteindelijk minder moeite dan een geschikte library vinden. :{
pi_139156103
quote:
0s.gif Op dinsdag 22 april 2014 19:51 schreef pascal08 het volgende:

[..]

Dat is gewoon niet wat ik zoek. Ik heb zelf inmiddels al een code geschreven. Kostte uiteindelijk minder moeite dan een geschikte library vinden. :{
:P Ik betwijfel het, maar goed dat je voorzien bent nu ^O^
pi_139161554
quote:
Interessante praatjes zijn dat :)
  FOK!mycroftheld vrijdag 25 april 2014 @ 22:56:05 #78
128465 verified  bondage
Ingewikkeld
pi_139265769
Ik zit al een tijd met mijn handen in het haar betreft de FOK!vriendjes module welke ik sinds kort in het FOK!stats script heb zitten. Het probleem is dat deze erg traag is, het probleem zit in het PHP script welke blijkbaar struggles heeft met de grote hoeveelheid data welke verwerkt moet worden.

Het script doet het volgende:
1. Haal alle topic-id's op waar de ingevoerde gebruiker heeft gereageerd
2. Haal alle posts behorende bij de topic-id's op in delen van 32 topics, dit omdat Sphinx is ingesteld op max 10.000 resultaten
3. Loop over alle posts en voeg de bijbehorende topic-id's toe aan een array welke de unieke topic's per gebruiker gevat.

Uit bovenstaande stappen hou je uiteindelijk een lijst over van alle topics waar andere gebruikers samen met de ingevoerde gebruiker hebben gereageerd.

Zie het volgende stukje code, de array $resultaat["matches"] (afkomstig uit Sphinx) bevat alle unieke topic-id's waar de ingevoerde gebruiker gereageerd heeft.

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
<?php
if(!empty($resultaat["matches"])) {
    
$current_count 0;
    
$topic_ids = array();
    
$users_topics = array();

    
$this->cl->resetGroupBy();
    
    
# loop over de gevonden topic-id's
    
foreach($resultaat["matches"] as $mId => $mData) {
        
$current_count++;
        
$pCounts $mData['attrs'];
        
$topic_ids[] = $pCounts['topic_id'];

        
# verwerk het in stukken van 32 topics zodat het max uit de volgende query nooit boven de 10.000 (max Sphinx) uitkomt met 310 posts per topic gerekend
        
if(count($topic_ids) == 32 || ($current_count == $total_found && !empty($topic_ids))) {
            
$this->cl->resetFilters();
            
$this->cl->SetFilter("topic_id"$topic_ids);
            
$topic_ids = array();
            
$this->cl->SetLimits(01000010000);
            
$resultaat $this->cl->Query(''$this->config['indices']);
            
$total_query_time += $resultaat["time"];

            if(!empty(
$resultaat["matches"])) {
                
# loop over de teruggegeven posts en voeg de topic-id's toe aan de array welke de unieke topics per gebruiker bevat, dit wordt later dvm de count functie toegevoegd aan de lijst welke wordt weergegeven in de tool
                # dit stuk is erg traag en doet er enkele seconden over om een lijst van 15.000 posts te verweken (ingevoerde gebruiker heeft in dit geval in 50 topics gepost)
                
foreach($resultaat["matches"] as $mId => $mData) {
                    if(
$mData['attrs']['auteur_id'] != $auteurId) {
                        if(!isset(
$users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']])) {
                            
$users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']] = 1;
                        }
                    }
                }
            }
        }
    }
}
?>

Iemand een idee hoe ik het script sneller kan maken? Ik heb er nu een limiet van een maand op zitten omdat het anders veel te traag wordt. Het idee is de topics te verkrijgen waar je samen met iemand hebt gepost. Als je vaak in dezelfde topics als de ingevoerde gebruiker post zul je hoger in de lijst van die gebruiker komen te staan.
  Moderator / Redactie Sport / Devops vrijdag 25 april 2014 @ 23:02:09 #79
176766 zoem
zoemt
pi_139265950
Wat is precies de bottleneck? Om wat voor orde van grootte gaat het in die loops? Zegt bijv. de xdebug profiler iets zinnigs?
  FOK!mycroftheld vrijdag 25 april 2014 @ 23:41:31 #80
128465 verified  bondage
Ingewikkeld
pi_139267277
quote:
0s.gif Op vrijdag 25 april 2014 23:02 schreef zoem het volgende:
Wat is precies de bottleneck? Om wat voor orde van grootte gaat het in die loops? Zegt bijv. de xdebug profiler iets zinnigs?
Bij dit stuk gaat het traag:

1
2
3
4
5
6
7
8
9
<?php
                
foreach($resultaat["matches"] as $mId => $mData) {
                    if(
$mData['attrs']['auteur_id'] != $auteurId) {
                        if(!isset(
$users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']])) {
                            
$users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']] = 1;
                        }
                    }
                }
?>

Bovenstaande voegt de teruggegeven data uit Sphinx toe aan de array waar de topics per gebruiker staan. Het gaat hier om losse posts, als een gebruiker in bijvoorbeeld 50 topics heeft gepost binnen een gekozen periode dan komt dat neer op ongeveer 15050 posts, ervan uitgaande dat er binnen elk topic 301 posts (incl. OP) staan.

Er zijn in dit geval dus 15050 loops nodig om alles bij langs te gaan, het meest trage is de isset en het toevoegen van de gegevens aan de array. Als dit dus op een andere, snellere manier zou kunnen dan zou dat een grote winst zijn aangezien ik de maximaal te selecteren periode dan kan ophogen, dit is nu een maand.

De overige stats worden allemaal door Sphinx zelf gegenereerd en dat gaat veel sneller. Deze statistiek is echter niet volledig te doen in Sphinx omdat ik op twee waarden moet groeperen, namelijk user_id en topic_id, dit omdat de topic-id's slechts één keer per gebruiker mogen worden geteld.

Een andere optie welke ik heb overwogen is het toevoegen van een gecombineerde waarde (user_id+topic_id) aan de index en daarop groeperen in de Sphinx query. Deze methode maakt de index echter significant groter en kost meer geheugen waar ik al niet teveel van heb in mijn server.

xdebug heb ik nog niet geprobeerd en heb ik ook geen ervaring mee. Ik ga daar ff naar kijken.
pi_139272487
1
2
3
4
5
6
7
8
9
<?php
                
foreach($resultaat["matches"] as $mId => $mData) {
                    if(
$mData['attrs']['auteur_id'] != $auteurId) {
                        if(!isset(
$users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']])) {
                            
$users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']] = 1;
                        }
                    }
                }
?>

Hier vallen me een paar dingen op. Om te beginnen ben ik benieuwd wat er in $auteurId staat en waarom er een != wordt gebruikt voor die vergelijking. Verder heb je de isset()-check niet nodig. Je set de waarde op 1, en als die toevallig al geset was, verandert er niets. En je benadert (ook zonder isset()) $mData['attrs']['auteur_id'] meerdere keren. Niet fout, maar ik zou er een variabele van maken (en dat waarschijnlijk ook doen voor $mData['attrs']['topic_id']), al was het maar voor een betere leesbaarheid.
  zaterdag 26 april 2014 @ 10:36:15 #82
166255 Maringo
Bèhèhèhèh
pi_139273421
quote:
0s.gif Op zaterdag 26 april 2014 09:31 schreef Light het volgende:

[ code verwijderd ]

Hier vallen me een paar dingen op. Om te beginnen ben ik benieuwd wat er in $auteurId staat en waarom er een != wordt gebruikt voor die vergelijking. Verder heb je de isset()-check niet nodig. Je set de waarde op 1, en als die toevallig al geset was, verandert er niets. En je benadert (ook zonder isset()) $mData['attrs']['auteur_id'] meerdere keren. Niet fout, maar ik zou er een variabele van maken (en dat waarschijnlijk ook doen voor $mData['attrs']['topic_id']), al was het maar voor een betere leesbaarheid.
Ik denk dat in het eerste if statement met de $auteurId wordt gekeken of de post niet van degene zelf is.

Die lijkt mij onhandig. De enkele keer dat ie nuttig is, weegt niet op tegen de keren dat ie niet nuttig is. Mijn idee is om die eruit te halen en eventueel na de foreach loop die ene entry uit $users_topics ($users_topics[$auteurId]) te halen.

[ Bericht 19% gewijzigd door Maringo op 26-04-2014 11:03:51 ]
Die volg topic-knop hè...
Op 02-06-2014 16:38 schreef Moeraskat
Je bent te goed voor de mensheid.
  zaterdag 26 april 2014 @ 11:55:11 #83
187069 slacker_nl
Sicko pur sang
pi_139275033
quote:
11s.gif Op vrijdag 25 april 2014 22:56 schreef bondage het volgende:
Het script doet het volgende:
1. Haal alle topic-id's op waar de ingevoerde gebruiker heeft gereageerd
2. Haal alle posts behorende bij de topic-id's op in delen van 32 topics, dit omdat Sphinx is ingesteld op max 10.000 resultaten
3. Loop over alle posts en voeg de bijbehorende topic-id's toe aan een array welke de unieke topic's per gebruiker gevat.
Kan je deze logica niet veel beter in je SQL oplossen, dat lijkt me vele malen sneller dan het oplossen in PHP.
In theory there is no difference between theory and practice. In practice there is.
  FOK!mycroftheld zaterdag 26 april 2014 @ 16:03:52 #84
128465 verified  bondage
Ingewikkeld
pi_139279644
quote:
0s.gif Op zaterdag 26 april 2014 09:31 schreef Light het volgende:

[ code verwijderd ]

Hier vallen me een paar dingen op. Om te beginnen ben ik benieuwd wat er in $auteurId staat en waarom er een != wordt gebruikt voor die vergelijking. Verder heb je de isset()-check niet nodig. Je set de waarde op 1, en als die toevallig al geset was, verandert er niets. En je benadert (ook zonder isset()) $mData['attrs']['auteur_id'] meerdere keren. Niet fout, maar ik zou er een variabele van maken (en dat waarschijnlijk ook doen voor $mData['attrs']['topic_id']), al was het maar voor een betere leesbaarheid.
In $auteurId staat het id van de user welke de post heeft geplaatst, aangezien ik de posts van degene waar op wordt gezocht wil negeren (wat Maringo al aangaf) gebruik ik die vergelijking.

Die isset is idd niet nodig, dom dat ik me dat niet eerder had gerealiseerd aangezien ik heel goed weet dat het in dit geval geen effect op de resulterende array heeft. Ik haal deze sowieso weg.

De waarden in $mData['attrs']['auteur_id'] en $mData['attrs']['topic_id'] zet ik in een variable, zelfs al levert het maar weinig op ben ik al blij.

In ieder geval heel erg bedankt voor het meedenken.
  FOK!mycroftheld zaterdag 26 april 2014 @ 16:06:01 #85
128465 verified  bondage
Ingewikkeld
pi_139279690
quote:
2s.gif Op zaterdag 26 april 2014 10:36 schreef Maringo het volgende:
Mijn idee is om die eruit te halen en eventueel na de foreach loop die ene entry uit $users_topics ($users_topics[$auteurId]) te halen.
Dank. Ik ga het ff aanpassen en checken of het winst oplevert :)

quote:
0s.gif Op zaterdag 26 april 2014 11:55 schreef slacker_nl het volgende:

[..]

Kan je deze logica niet veel beter in je SQL oplossen, dat lijkt me vele malen sneller dan het oplossen in PHP.
Geprobeerd, met de volgende query:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT COUNT(*), naam FROM (
   SELECT fok_user.naam, `fok_post`.auteur  
   FROM `fok_post` 
   RIGHT JOIN (
      SELECT DISTINCT topicid FROM `fok_post` 
      WHERE `auteur` = 128465
      AND `fok_post`.`tijdstip` BETWEEN UNIX_TIMESTAMP('2014-04-01 00:00:01') AND UNIX_TIMESTAMP('2014-04-26 23:59:59')
      AND `fok_post`.`year` = 2014
   ) AS t ON (`fok_post`.topicid = t.topicid)
   JOIN fok_user ON `fok_post`.auteur = fok_user.id
   WHERE  `fok_post`.auteur != 128465
   GROUP BY `fok_post`.auteur, `fok_post`.topicid
) AS u
GROUP BY auteur
ORDER BY COUNT(*) DESC
LIMIT 100

Helaas een stuk trager dan mijn PHP oplossing ;(

[ Bericht 61% gewijzigd door bondage op 26-04-2014 16:11:06 ]
pi_139280489
quote:
14s.gif Op zaterdag 26 april 2014 16:03 schreef bondage het volgende:

[..]

In $auteurId staat het id van de user welke de post heeft geplaatst, aangezien ik de posts van degene waar op wordt gezocht wil negeren (wat Maringo al aangaf) gebruik ik die vergelijking.

Die isset is idd niet nodig, dom dat ik me dat niet eerder had gerealiseerd aangezien ik heel goed weet dat het in dit geval geen effect op de resulterende array heeft. Ik haal deze sowieso weg.

De waarden in $mData['attrs']['auteur_id'] en $mData['attrs']['topic_id'] zet ik in een variable, zelfs al levert het maar weinig op ben ik al blij.

In ieder geval heel erg bedankt voor het meedenken.
Ahja, je wilt een overzicht van vriendjes maken. Hoe moet ik dat zien? Een lijst van users die in dezelfde topics gepost hebben?
  zaterdag 26 april 2014 @ 17:20:05 #87
166255 Maringo
Bèhèhèhèh
pi_139280907
quote:
0s.gif Op zaterdag 26 april 2014 16:58 schreef Light het volgende:

[..]

Ahja, je wilt een overzicht van vriendjes maken. Hoe moet ik dat zien? Een lijst van users die in dezelfde topics gepost hebben?
Klopt. Zo is dit mijn lijstje wat ie eens op verzoek maakte:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
142 Rezania
139 d4v1d
120 Amarantha
118 FL_Freak
118 Lt.Surge
103 SgtPorkbeans
96 LittleBrownie
96 Flippiee
95 gianni61
94 Fopje
91 BBQSausage
85 Bitterlemon
84 Snowbells
74 Roburtt
72 HeaN82

getallen zijn het aantal topics.
Die volg topic-knop hè...
Op 02-06-2014 16:38 schreef Moeraskat
Je bent te goed voor de mensheid.
  FOK!mycroftheld zaterdag 26 april 2014 @ 17:22:27 #88
128465 verified  bondage
Ingewikkeld
pi_139280955
quote:
0s.gif Op zaterdag 26 april 2014 16:58 schreef Light het volgende:

[..]

Ahja, je wilt een overzicht van vriendjes maken. Hoe moet ik dat zien? Een lijst van users die in dezelfde topics gepost hebben?
Exact 8-)
pi_139281132
quote:
14s.gif Op zaterdag 26 april 2014 17:22 schreef bondage het volgende:

[..]

Exact 8-)
Ik heb je query wat herschreven, zonder subqueries en right joins. Ongetest, uiteraard.
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT count(DISTINCT friend_post.topic_id) cnt, u.naam
FROM fok_user u
INNER JOIN fok_post search_user_post
  ON search_user_post.auteur = 128465
  AND search_user_post.tijdstip BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:01') AND UNIX_TIMESTAMP('2014-04-26 23:59:59')
  AND search_user_post.year = 2014
INNER JOIN fok_post friend_post
  ON friend_post.auteur = u.id
  AND friend_post.auteur != 128465
  AND friend_post.topic_id = search_user_post.topic_id
GROUP BY u.naam
ORDER BY cnt DESC
LIMIT 100;
  FOK!mycroftheld zaterdag 26 april 2014 @ 17:40:46 #90
128465 verified  bondage
Ingewikkeld
pi_139281234
quote:
0s.gif Op zaterdag 26 april 2014 17:33 schreef Light het volgende:
SELECT count(DISTINCT friend_post.topic_id) cnt, u.naam
FROM fok_user u
INNER JOIN fok_post search_user_post
ON search_user_post.auteur = 128465
AND search_user_post.tijdstip BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:01') AND UNIX_TIMESTAMP('2014-04-26 23:59:59')
AND search_user_post.year = 2014
INNER JOIN fok_post friend_post
ON friend_post.auteur = u.id
AND friend_post.auteur != 128465
AND friend_post.topic_id = search_user_post.topic_id
GROUP BY u.naam
ORDER BY cnt DESC
LIMIT 100;
Oeh, ik ga hem ff testen.
  FOK!mycroftheld zaterdag 26 april 2014 @ 18:07:29 #91
128465 verified  bondage
Ingewikkeld
pi_139281746
Ik heb de twee query's getest met het volgende resultaat (uiteraard SQL_NO_CACHE toegevoegd):

Jouw query:

Weergave van records 100 - 99 ( 100 totaal, query duurde 0.8366 sec)

1
2
3
4
id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra
1     SIMPLE     search_user_post     ref     topicid,tijdstip,auteur,year     auteur     4     const     12009     Using where; Using temporary; Using filesort
1     SIMPLE     friend_post     ref     topicid,auteur     topicid     4     fokstats.search_user_post.topicid     100     Using where
1     SIMPLE     u     eq_ref     PRIMARY     PRIMARY     4     fokstats.friend_post.auteur     1

Mijn query:

Weergave van records 100 - 99 ( 100 totaal, query duurde 4.1594 sec)

1
2
3
4
5
6
id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra
1     PRIMARY     <derived2>     ALL     NULL    NULL    NULL    NULL    2919     Using temporary; Using filesort
2     DERIVED     <derived3>     ALL     NULL    NULL    NULL    NULL    110     Using temporary; Using filesort
2     DERIVED     fok_post     ref     topicid,auteur     topicid     4     t.topicid     100     Using where
2     DERIVED     fok_user     eq_ref     PRIMARY     PRIMARY     4     fokstats.fok_post.auteur     1     
3     DERIVED     fok_post     ref     tijdstip,auteur,year     auteur     4         12008     Using where; Using temporary

Die van jou is een stuk sneller. Ik ga even testen over langere periodes. Als dit goed werkt kan ik dit beter gebruiken dan de PHP oplossing.

[ Bericht 7% gewijzigd door bondage op 26-04-2014 18:18:21 ]
  maandag 28 april 2014 @ 09:40:11 #92
25889 Sitethief
Fulltime Flapdrol
pi_139332178
Is het niet sowieso handiger om zoveel mogelijk het ophalen van de juiste data door een database engine te laten doen ipv dat ik PHP na te gaan bootsen? De database engine zal hierin bijna altijd sneller zijn, tenzij je 10 subqueries ofzo gebruikt.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
  FOK!mycroftheld maandag 28 april 2014 @ 10:27:50 #93
128465 verified  bondage
Ingewikkeld
pi_139333156
quote:
0s.gif Op maandag 28 april 2014 09:40 schreef Sitethief het volgende:
Is het niet sowieso handiger om zoveel mogelijk het ophalen van de juiste data door een database engine te laten doen ipv dat ik PHP na te gaan bootsen? De database engine zal hierin bijna altijd sneller zijn, tenzij je 10 subqueries ofzo gebruikt.
De rest van de stats worden gegenereerd door Sphinx, echter heeft Sphinx niet de mogelijkheid om op meerdere velden te groeperen. Als ik dit volledig in Sphinx zou kunnen doen zou het een stuk sneller gaan.

Maar ik realiseer me nu dat ik dit beter op kan lossen dmv een query ipv de data door php te laten verwerken.

Een andere optie is een betere server aanschaffen, daar heb ik echter op dit moment geen geld voor ;(
pi_139349206
quote:
14s.gif Op maandag 28 april 2014 10:27 schreef bondage het volgende:

[..]

De rest van de stats worden gegenereerd door Sphinx, echter heeft Sphinx niet de mogelijkheid om op meerdere velden te groeperen. Als ik dit volledig in Sphinx zou kunnen doen zou het een stuk sneller gaan.

Maar ik realiseer me nu dat ik dit beter op kan lossen dmv een query ipv de data door php te laten verwerken.

Een andere optie is een betere server aanschaffen, daar heb ik echter op dit moment geen geld voor ;(
Voer je die query uit op een 'eigen' server? Als in een database-server die je zelf beheert en waar je indexen kunt aanpassen? Dan moet er nog wel wat snelheidswinst te behalen zijn.
  FOK!mycroftheld maandag 28 april 2014 @ 22:54:08 #95
128465 verified  bondage
Ingewikkeld
pi_139358770
quote:
0s.gif Op maandag 28 april 2014 19:09 schreef Light het volgende:

[..]

Voer je die query uit op een 'eigen' server? Als in een database-server die je zelf beheert en waar je indexen kunt aanpassen? Dan moet er nog wel wat snelheidswinst te behalen zijn.
Jup, is mijn eigen server. Dit zijn de velden en indexen die ik momenteel heb:



pi_139359009
quote:
11s.gif Op maandag 28 april 2014 22:54 schreef bondage het volgende:

[..]

Jup, is mijn eigen server. Dit zijn de velden en indexen die ik momenteel heb:

[ afbeelding ]

[ afbeelding ]
Hmm... year heeft een kardinaliteit van 1. Heb je alleen posts uit 2014 in de database staan?
  FOK!mycroftheld maandag 28 april 2014 @ 23:01:43 #97
128465 verified  bondage
Ingewikkeld
pi_139359115
quote:
0s.gif Op maandag 28 april 2014 22:59 schreef Light het volgende:

[..]

Hmm... year heeft een kardinaliteit van 1. Heb je alleen posts uit 2014 in de database staan?
Dat viel mij ook al op idd. Er staat 6 jaar aan data in die tabel.

Is het overigens erg dat id een int(15) is? Ik heb deze database ooit van iemand overgenomen en hier niet bij stilgestaan, ik weet echter dat een gewone int niet tot 15 gaat.
pi_139359654
quote:
14s.gif Op maandag 28 april 2014 23:01 schreef bondage het volgende:

[..]

Dat viel mij ook al op idd. Er staat 6 jaar aan data in die tabel.
Mooi :) Dan zou ik de index "auteur" wijzigen en er "year" als tweede kolom aan toevoegen. Een index mag namelijk meer dan 1 kolom bevatten :)

(Je zou ook nog in plaats van "year" de kolom "tijdstip" kunnen toevoegen, maar ik vermoed dat het verschil vrij klein is terwijl de index veel groter kan worden.)
quote:
Is het overigens erg dat id een int(15) is? Ik heb deze database ooit van iemand overgenomen en hier niet bij stilgestaan, ik weet echter dat een gewone int niet tot 15 gaat.
Nee, dat getal maakt alleen uit als je zerofill gebruikt. En dat wil je niet (want voorloopnullen toevoegen hoort de database niet te doen).
  FOK!mycroftheld maandag 28 april 2014 @ 23:19:13 #99
128465 verified  bondage
Ingewikkeld
pi_139359878
quote:
0s.gif Op maandag 28 april 2014 23:13 schreef Light het volgende:

[..]

Mooi :) Dan zou ik de index "auteur" wijzigen en er "year" als tweede kolom aan toevoegen. Een index mag namelijk meer dan 1 kolom bevatten :)

(Je zou ook nog in plaats van "year" de kolom "tijdstip" kunnen toevoegen, maar ik vermoed dat het verschil vrij klein is terwijl de index veel groter kan worden.)

[..]

Nee, dat getal maakt alleen uit als je zerofill gebruikt. En dat wil je niet (want voorloopnullen toevoegen hoort de database niet te doen).
Dank, ik ga die twee indices even combineren en de query dan nogmaals testen. Ik gebruik geen zerofill dus dat is dan geen probleem gelukkig.

Wat is eigenlijk het voordeel van het combineren van die twee?
pi_139366278
Volgens mij kun je year beter helemaal uit de query halen en gewoon zorgen dat je tijdstippen nooit meerdere jaren overspannen.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')