abonnement Unibet Coolblue Bitvavo
  dinsdag 15 februari 2011 @ 13:36:12 #1
75592 GlowMouse
l'état, c'est moi
pi_92816501

cd niet bijgeleverd

Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt :)

Vorige delen:
Via de zoekfunctie

Zie ook:
PHP Dataverwerking
Officiële PHP website
PHP Documentatie
MySQL Reference Manual
Yet Another PHP Faq
PHP Cheat Sheet
PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

Tutorials:
W3Schools PHP
W3Schools SQL

Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/PHP
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92816616
Top GlowMouse! ik ben weer van de partij! :)

@GlowMouse; het inserten van 1.500.000 records in je tabellen (tags/tag_links) kosten aardig wat tijd, is dat normaal?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 15 februari 2011 @ 13:40:22 #3
75592 GlowMouse
l'état, c'est moi
pi_92816666
Meer dan een uurtje mag het niet kosten. Indices tijdelijk uitzetten (niet verwijderen) helpt, storage engine tweaken soms ook.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92816684
Lang leve bigdump ^O^
pi_92818192
@GlowMouse, lol het duurt zekers 8 uur maar dat is dan ook incl indices, bestanden en andere tabellen vullen...

heb zelf totaal geen ervaring met de engine te tweaken dus moet ik gewoon maar even rustig afwachten (tis een slome asus laptop :P)

@remi1986; dat is nu geen optie aangezien ik werk met on duplicate key en ruim 250K aan bestanden :@ maar zet nu wel de queries in een extern bestand zo dat ik als er iets fout is gegaan ik alles zo terug kan zetten zonder weer alle bestanden langs te lopen
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_92855657
Pff mijn import is voltooid en heb nu de volgende query; die er volgens mij nog steeds lang over doet.

1
2
3
4
5
6
7
8
9
10
SELECT `pix`.*,
`pix_tags`.`tag`
FROM `pix_tags`
LEFT JOIN `pix_tags_links`
ON `pix_tags_links`.`tag_id` = `pix_tags`.`tag_id`
LEFT JOIN `pix`
ON `pix`.`pix_id` = `pix_tags_links`.`pix_id`
WHERE `pix_tags`.`tag` LIKE '%cool%'  
AND `pix`.`adult` = 'n'
LIMIT 0,20

deze duurt wel 0.3 seconden voor maar 241K tags / 1.500k aan tag_links

Kan ik deze nog verder optimaliseren?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_92855952
quote:
1s.gif Op woensdag 16 februari 2011 08:57 schreef Chandler het volgende:
Pff mijn import is voltooid en heb nu de volgende query; die er volgens mij nog steeds lang over doet.

[ code verwijderd ]

deze duurt wel 0.3 seconden voor maar 241K tags / 1.500k aan tag_links

Kan ik deze nog verder optimaliseren?
Je doet
1SELECT `pix`.*,

Wat alle kolommen selecteert. Heb je ze allemaal nodig? Misschien kan je alleen de kolommen selecteren die je echt nodig hebt. Volgens mij scheelt dat toch weer iets.
pi_92856090
klopt er zouden een paar kolommen af kunnen maar zou niet weten of dat echt wel een besparing oplevert (extreme besparing)... maar zal het proberen!

-edit-
geprobeerd totaal geen extra preformance winst :{
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_92856328
quote:
1s.gif Op woensdag 16 februari 2011 09:19 schreef Chandler het volgende:
klopt er zouden een paar kolommen af kunnen maar zou niet weten of dat echt wel een besparing oplevert (extreme besparing)... maar zal het proberen!

-edit-
geprobeerd totaal geen extra preformance winst :{
Oke, naja viel te proberen. Je query is eigenlijk ook helemaal niet zo lang en haalt maar 20 records op.

Vond op http://www.debianadmin.com/top-84-mysql-performance-tips.html nog een lijst met performance tips. Misschien staat er nog wat tussen. Ik weet niet in hoeverre die lijst goed is. Just trying to help :@
pi_92856405
Alle hulp is welkom! en zo leren we allerbeide weer wat meer :) ik ga het eens doornemen! :)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_92857244
quote:
1s.gif Op woensdag 16 februari 2011 08:57 schreef Chandler het volgende:
Pff mijn import is voltooid en heb nu de volgende query; die er volgens mij nog steeds lang over doet.

[ code verwijderd ]

deze duurt wel 0.3 seconden voor maar 241K tags / 1.500k aan tag_links

Kan ik deze nog verder optimaliseren?
Met goedgeplaatste indices moet je een eind kunnen komen, volgens mij :)
  woensdag 16 februari 2011 @ 10:33:33 #12
75592 GlowMouse
l'état, c'est moi
pi_92857889
quote:
WHERE `pix_tags`.`tag` LIKE '%cool%'
:?

http://gathering.tweakers.net/forum/list_messages/1429432
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92858216
Oh, dat had ik nog niet eens gezien, maar dat is helemaal niet te indexeren. Dus met een goede index kun je ook niets oplossen, simpelweg omdat een goede index niet mogelijk is.

Chandler, LIKE %cool% komt op hetzelfde neer als de Dikke Van Dale pakken en alle woorden waar een Q in staat opzoeken. Dat moet je niet willen.
  woensdag 16 februari 2011 @ 14:49:27 #14
334357 Emery
Heavy Metal King!
pi_92866884
Weet iemand wat hier fout gaat?

1
2
3
<?php
$query 
"SELECT agenda_id, agendatitel, agendaplaats, from_unixtime(agendadatum, '%d-%m-%Y') AS datum, agendabeschrijving FROM agenda WHERE agendadatum >= NOW() ORDER BY agenda_id ASC";
?>

Ik wil dat hij alle data van vandaag en ná vandaag laat zien. Data van voor vandaag dus niet. Hij geeft nu gewoon 0 resultaat.

Als ik inplaats van NOW(), $vandaag = date("d-m-Y"); gebruik en $vandaag achter WHERE invul laat hij álle resultaten zien inplaats van alleen de >=.

Ben ongetwijfeld dom bezig, maar goed, kom er niet uit.
"My name is Emery and primarily I make noises - and ideas".
pi_92866968
Werken datum velden in MySQL niet in Y-m-d formaat?
  woensdag 16 februari 2011 @ 14:52:32 #16
334357 Emery
Heavy Metal King!
pi_92867026
quote:
1s.gif Op woensdag 16 februari 2011 14:51 schreef remi1986 het volgende:
Werken datum velden in MySQL niet in Y-m-d formaat?
Hij zet de datum als unix_timestamp in een varchar veld.
"My name is Emery and primarily I make noises - and ideas".
pi_92867064
dan moet je

1
2
3
<?php
strtotime
(date("Y-m-d"));
?>

gebruiken denk ik aangezien het anders geen timestamp is
  woensdag 16 februari 2011 @ 14:55:31 #18
75592 GlowMouse
l'état, c'est moi
pi_92867153
mktime
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92867267
Overigs doe je

1from_unixtime(agendadatum, '%d-%m-%Y') AS datum

en

1WHERE agendadatum >= NOW()

moet dat dan niet datum zijn i.p.v. agendadatum?
  woensdag 16 februari 2011 @ 14:58:52 #20
334357 Emery
Heavy Metal King!
pi_92867306
quote:
1s.gif Op woensdag 16 februari 2011 14:58 schreef remi1986 het volgende:
Overigs doe je

[ code verwijderd ]

en

[ code verwijderd ]

moet dat dan niet datum zijn i.p.v. agendadatum?
Nee, want als je daar agendadatum van maakt gaat hij vervolgens WHERE doen op de unixtimestamp die al is omgezet volgens mij.
"My name is Emery and primarily I make noises - and ideas".
pi_92867953
Klopt idd. Maar dan kan je toch gewoon een timestamp maken met strtotime of mktime en dan kijken welke varchar daar boven zit?

Ik heb zelf even een testtabel gemaakt met een varchar waar ik 2 timestamps in heb gezet.
Die van 1-1-2011 en 10-10-2011. Een in de toekomst en één in het verleden.

Als ik dan
1SELECT from_unixtime(timestamp, '%d-%m-%Y') AS datum FROM test WHERE timestamp <= NOW()


krijg ik ze beide

en met >= niks
  woensdag 16 februari 2011 @ 15:19:16 #22
334357 Emery
Heavy Metal King!
pi_92868214
Succes.
"My name is Emery and primarily I make noises - and ideas".
pi_92868254
quote:
6s.gif Op woensdag 16 februari 2011 15:19 schreef Emery het volgende:
Succes.
Opgelost?
pi_92868637
quote:
14s.gif Op woensdag 16 februari 2011 14:52 schreef Emery het volgende:

[..]

Hij zet de datum als unix_timestamp in een varchar veld.
Een unix timestamp is gewoon een getal, kan dus prima in een INT-veld :)

En verder zou ik de datum gewoon als timestamp uit de database halen. Je kunt op een veel later moment (namelijk als je alles op het scherm zet) nog wel bepalen hoe die datum precies op het scherm moet verschijnen.
pi_92874555
quote:
Ik heb je topic meerdere keren door gelezen maar kan niet vinden wat ik fout doe!

Daarbij komt dat ik niets anders weet om te zoeken op tags, en aangezien ik dat wel wil heb ik dit geprobeerd. Kun je mij wijzen op,mijn fouten zodat ik er van kan leren?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 16 februari 2011 @ 17:49:28 #26
75592 GlowMouse
l'état, c'est moi
pi_92875394
Vergelijk mijn queries maar met jouw queries. Ik heb per tag één id.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92876014
Dat heb ik ook, maar ik heb meerdere tags per plaatje
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_92876637
Simpel tooltje om timestamp om te zetten naar utc+1
http://tools.pcextreme.nl/?page=date
"Op Fok! val je pas op als je normaal bent." -mazaru
  woensdag 16 februari 2011 @ 18:48:54 #29
75592 GlowMouse
l'état, c'est moi
pi_92877862
quote:
1s.gif Op woensdag 16 februari 2011 18:04 schreef Chandler het volgende:
Dat heb ik ook, maar ik heb meerdere tags per plaatje
Dat sluit mijn db-opzet niet uit.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92881837
Klopt, maar wijs mij dan op het gene wat ik fout doe want nu snap ik er de balle van....
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 16 februari 2011 @ 20:03:05 #31
75592 GlowMouse
l'état, c'est moi
pi_92882432
Jij koppelt meer tags aan één tag-id.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92896884
nee, ook niet. Ik gebruik precies de tabellen die jij ook gebruikt in je voorbeeld op tweakers! tenzij je het hebt over de 'link' tabel tussen mijn plaatjes en de tags... maar dat is ook nodig voor mijn systeem want aan 1 tag per plaatje heb ik weinig! :)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 16 februari 2011 @ 23:40:11 #33
75592 GlowMouse
l'état, c'est moi
pi_92897653
waarom gebruik je dan LIKE '%cool%' en niet ='cool'?
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92898640
omdat ik eventueel ook tags wil pakken die een deel van het woord bevatten!, of denk je dat dat over de top is?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  donderdag 17 februari 2011 @ 00:07:48 #35
75592 GlowMouse
l'état, c'est moi
pi_92898720
oh, je moet altijd met hele tags werken
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
pi_92898876
LOL, maar heb je ook een idee of ik dit eventueel voor delen van tags kan gebruiken of moet ik dan over een heel andere opzet gaan nadenken? zo niet dan houden we het op hele! :)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  donderdag 17 februari 2011 @ 00:14:20 #37
75592 GlowMouse
l'état, c'est moi
pi_92898914
quote:
1s.gif Op woensdag 16 februari 2011 10:46 schreef Light het volgende:
Chandler, LIKE %cool% komt op hetzelfde neer als de Dikke Van Dale pakken en alle woorden waar een Q in staat opzoeken. Dat moet je niet willen.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
  donderdag 17 februari 2011 @ 01:44:23 #38
334357 Emery
Heavy Metal King!
pi_92901341
Hmm. Ik weet niet wat ik heb gedaan maar vanmiddag deed mijn script nog wat hij moest doen (gewoon de datum die is ingevuld in het formulier naar unix_timestamp omzetten en in de database pleuren) maar opeens (volgens mij heb ik niks veranderd?) doet hij het alleen nog maar de datum van vandaag in de database zetten.

1
2
3
4
5
6
7
8
9
10
<?php
$mktijd 
mktime($maand$dag$jaar);
        
        
$sql"INSERT INTO agenda (agendatitel, agendaplaats, agendadatum, agendabeschrijving) 
        VALUES 
            ('" 
mysql_real_escape_string($agendatitel) . "',
             '" 
mysql_real_escape_string($agendaplaats) . "', 
             '" 
mysql_real_escape_string($mktijd) . "', 
             '" 
mysql_real_escape_string($agendabeschrijving) . "')";
?>

Die variabelen $maand, $dag en $jaar verkrijgt hij door $maand = $_POST['maand']; et cetera.
"My name is Emery and primarily I make noises - and ideas".
pi_92901423
1$mktijd = mktime(0,0,0, $maand, $dag, $jaar);
  donderdag 17 februari 2011 @ 01:51:51 #40
334357 Emery
Heavy Metal King!
pi_92901503
quote:
5s.gif Op donderdag 17 februari 2011 01:47 schreef Tegan het volgende:

[ code verwijderd ]

Lijkt me sterk dat het daaraan ligt? Hij deed het vanmiddag gewoon goed en toen heb ik ook geen 0,0,0 gebruikt. Overigens is nu opeens de webserver van de website waar ik aan het testen ben down. Godver.
"My name is Emery and primarily I make noises - and ideas".
pi_92901530
quote:
14s.gif Op donderdag 17 februari 2011 01:51 schreef Emery het volgende:

[..]

Lijkt me sterk dat het daaraan ligt? Hij deed het vanmiddag gewoon goed en toen heb ik ook geen 0,0,0 gebruikt. Overigens is nu opeens de webserver van de website waar ik aan het testen ben down. Godver.
Enigste wat me opviel. Verder weet ik het ook niet :P . [/newb]

Lijkt me dat er vandaag al iets raars was met de server omdat hij nu down is. Dus ik denk dat het daaraan ligt. Als het eerder nooit een probleem was.
  donderdag 17 februari 2011 @ 01:58:47 #42
334357 Emery
Heavy Metal King!
pi_92901613
Ik denk dat er iets fout gaat in de POST want als ik in mijn 'uw bericht is toegevoegd'-message $dag, $maand en $jaar echo krijg ik gewoon $dag, $maand en $jaar te zien in plaats van de waardes die zijn ingevuld. Apart.
"My name is Emery and primarily I make noises - and ideas".
pi_92901617
Wat geeft vardump($mktijd) en wat is de unixtimestamp van vandaag?

Hm, het is vast een fout in de postwaarden doorsturen dan.
  donderdag 17 februari 2011 @ 02:11:19 #44
334357 Emery
Heavy Metal King!
pi_92901814
Oké, dat is het ook niet. Het ligt aan mijn wijzigingsformulier denk ik. Hij voegt ze nu prima toe, zodra ik in mijn wijzigingsformulier de datum aanpas slaat hij hem niet goed op in de database. Als ik daar $maand e.d. echo laat hij overigens wél de goede (nieuwe) data zien na het opslaan. Dus dan gaat er iets fout bij de mktime() om het in de database op te slaan denk ik. Als hij geen waarden vindt in de variabelen bij mktime($maand, $blabla), ziet hij het dan gewoon als mktime()? Want als hij dat doet kan het wel kloppen dat hij vandaag in de database zet.
"My name is Emery and primarily I make noises - and ideas".
pi_92901853
vardump(mktime()) en je hebt je antwoord.

quote:
mktime() returns the Unix timestamp of the arguments given. If the arguments are invalid, the function returns FALSE (before PHP 5.1 it returned -1).
pi_92901883
Ik weet het denk ik. Als je mktime() dus false is of een foute waarde heeft dan komt er automatisch vandaag in de database omdat het veld niet leeg mag zijn ofzo?

if ($mktijd) { voer in }
else { error }
  donderdag 17 februari 2011 @ 02:21:32 #47
334357 Emery
Heavy Metal King!
pi_92901921
Jup. Krijg de unixtimestamp van dit moment als ik dat doe. Géén idee waarom hij het niet doet maar in ieder geval weet ik nu waar de fout zit.
"My name is Emery and primarily I make noises - and ideas".
  donderdag 17 februari 2011 @ 02:25:42 #48
334357 Emery
Heavy Metal King!
pi_92901980
Et voila. Blijkbaar maakt het hem bij een INSERT niet uit dat er geen 0, 0, 0, staat in de mktime() en bij een UPDATE wel.. 0, 0, 0 toegevoegd in mktime() en hij werkt.

:') !
"My name is Emery and primarily I make noises - and ideas".
pi_92902019
Haha, dus mijn eerste opmerking was de fout :D .
  donderdag 17 februari 2011 @ 02:32:12 #50
334357 Emery
Heavy Metal King!
pi_92902047
quote:
14s.gif Op donderdag 17 februari 2011 02:29 schreef Tegan het volgende:
Haha, dus mijn eerste opmerking was de fout :D .
Haha ongeveer wel ja. Maar toen dacht ik nog dat het aan de INSERT lag. En niet aan het update script. Nou ja, bedankt voor het meedenken!
"My name is Emery and primarily I make noises - and ideas".
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')