Ik denk dat er geen index op orders.orderdate staat. Een index daar zal helpen. En verder wat GlowMouse zegt.quote:
ANSI ken ik alleen van BBS systemen, glowmouse ;-) Ik ga er mee aan de slag en hou jullie op de hoogte.quote:Op donderdag 15 december 2011 23:15 schreef GlowMouse het volgende:
Schrijf gewoon COUNT(*), zet een index op order_content.product_id en kijk naar ansi style joins
Dat is inderdaad een goede oplossing Je zou het ook clientside kunnen doen via javascript. Als je wilt inloggen vul je eerst het email adres in. Dat wordt het aantal loops opgehaald dat bij het email adres hoort en vervolgens wordt de boel (e-mail + ww) x aantal keer gehashed en naar de server verstuurd. via deze manier is een challenge response systeem ook mogelijkquote:Op woensdag 14 december 2011 10:13 schreef _Flash_ het volgende:
Ik vind het maar een riskante methode. Kom je niet in de problemen als er bijvoorbeeld meerdere mensen tegelijk willen inloggen, de processorkracht verdeeld wordt over die berekeningen en ze dus allemaal de juiste diepte niet halen? Soort van oplossing is natuurlijk wel om het aantal gebruikte loopjes ook in de tabel op te slaan, dan hoef je niet met die factor anderhalf te werken ;-)
Ik zit met de aanpassingen nog steeds op een query van 57 seconden. Ik heb alleen de ANSI join nog niet gedaanquote:Op vrijdag 16 december 2011 08:34 schreef Swetsenegger het volgende:
[..]
ANSI ken ik alleen van BBS systemen, glowmouse ;-) Ik ga er mee aan de slag en hou jullie op de hoogte.
order_content.product_id had ik ondertussen een index opgezet maar dat helpt niet echt.
Dat hij een manier zoekt om iedereen aan een andere willekeurige persoon te koppelen.quote:
Oh zo. Maak gewoon een resultset op basis van alle id`s van de gebruikers, minus je eigen, en laat hem daar 1tje van kiezen?quote:Op vrijdag 16 december 2011 20:56 schreef Pizzalucht het volgende:
[..]
Dat hij een manier zoekt om iedereen aan een andere willekeurige persoon te koppelen.
Je hebt 5 personen, en iedereen is aan iemand gekoppeld, maar niet aan zichzelf.
Hoe doe je dat het beste, proberen totdat je de goede combi hebt, of is daar een soort algoritme voor.
Dat is zijn vraag.
niet pas trekken als iemand de url aanroept, of bij het een na laatste loodje zorgen dat je niet in een foute situatie komtquote:Op vrijdag 16 december 2011 21:15 schreef das_phantom het volgende:
Ter info. Ik heb iedereen de url gegeven. Iedereen trekt het lootje wanneer diegene wil. De persoon selecteert zijn eigen naam en het systeem bekijkt dan in de database wie er nog in zit, en daaruit kiest hij de naam <> eigen naam. Als er nog maar een naam inzit en die is van diegene zelf, dan gaat het fout.
Wat nou als randomizen van personen dezelfde lijst oplevert als je lijst waar je aan gaat koppelen? Dan krijgt iedereen zichzelfquote:Op vrijdag 16 december 2011 23:33 schreef ErikNijland het volgende:
Oplossing voor dat lootjes trekken.
Zet de personen in een random volgorde. Bijvoorbeeld:
edacb
En elke persoon krijgt de volgende persoon in de array:
e krijgt d
d krijgt a
a krijgt c
c krijgt b
en bij b is er geen volgende daarom krijgt hij de eerste uit de array: e
zo; en nu weekend
Iemand nog een idee?quote:Op vrijdag 16 december 2011 17:47 schreef Swetsenegger het volgende:
[..]
Ik zit met de aanpassingen nog steeds op een query van 57 seconden. Ik heb alleen de ANSI join nog niet gedaan
Het is niet zo dat hij 2 lijsten gaat koppelen. Hij heeft 1 lijst met personen a,b,c,d en e.quote:Op zaterdag 17 december 2011 11:24 schreef Pakspul het volgende:
[..]
Wat nou als randomizen van personen dezelfde lijst oplevert als je lijst waar je aan gaat koppelen? Dan krijgt iedereen zichzelf
Ik zou een functie (class liever) maken die bijhoudt welke personen meedoen, random persoon toewijst aan iemand en daarbij rekening houdt dat het niet persoon is waar die aan toe wordt gewezen.
1 2 3 4 5 6 7 | SELECT produkten.*, count(*) as productcount FROM produkten, order_content JOIN orders on (orders.order_id=order_content.order_id) WHERE produkten.product_id = order_content.product_id AND produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 AND orders.wishlist=0 AND orders.activated=1 AND orders.orderdate between ('2011-01-01 0:0:0') AND ('2012-01-01 0:0:0') GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 5 |
jajajaquote:Op zaterdag 17 december 2011 19:13 schreef GlowMouse het volgende:
twee join stijlen door elkaar, lelijk hoor
1 2 3 4 5 6 7 8 | SELECT produkten.*, count(*) as productcount FROM order_content JOIN orders on (orders.order_id=order_content.order_id) JOIN produkten on (produkten.product_id=order_content.product_id) WHERE produkten.product_id = order_content.product_id AND produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 AND orders.wishlist=0 AND orders.activated=1 AND orders.orderdate between ('2011-01-01 0:0:0') AND ('2012-01-01 0:0:0') GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 5 |
Deze query draait in 37ms, mijn eerste zonder ANSI join in 57 seconden.quote:Op zaterdag 17 december 2011 19:34 schreef GlowMouse het volgende:
Je WHERE is nog te uitgebreid. Deze query zou ook niet sneller draaien dan de eerste.
1 2 3 4 5 6 7 8 | SELECT produkten.*, count(*) as productcount FROM order_content JOIN orders on (orders.order_id=order_content.order_id) JOIN produkten on (produkten.product_id=order_content.product_id) WHERE produkten.product_menu IS NOT NULL AND produkten.product_menu<>0 AND orders.wishlist=0 AND orders.activated=1 AND orders.orderdate between ('2011-01-01 0:0:0') AND ('2012-01-01 0:0:0') GROUP BY produkten.product_id ORDER BY productcount DESC LIMIT 0, 5 |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |