FOK!forum / Digital Corner / [PHP/(My)SQL] voor dummies #93
Pakspuldonderdag 18 augustus 2011 @ 11:36
php.jpg


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 :)

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
Sitethiefdonderdag 18 augustus 2011 @ 11:45
@Pakspul

Op die manier :D, misschien is dat een optie in de toekomst, maar ik wil het me nu nog niet te moeilijk maken.
Pakspuldonderdag 18 augustus 2011 @ 11:51
Zeker een aanrader om eens na te kijken, want het past perfect in het MVC model: http://nl.wikipedia.org/wiki/Model-view-controller-model
GIdonderdag 18 augustus 2011 @ 12:02
Wat is de meerwaarde eraan om iedere keer zelf de db classe aan te moeten roepen met geinstance ?

Ik heb een $db classe die ik kan benaderen door heel mijn code, wat ik wel in iedere classe moet doen is in de __construct zorgen dat $this->db een referentie is naar de $db.

Hierdoor kan ik overal (hoe diep ik ook zit) met $this->db->runSQL("SQL_SHORT",$parameter1,$parameter2) de query die ik wil uitvoeren...
Pakspuldonderdag 18 augustus 2011 @ 12:08
quote:
3s.gif Op donderdag 18 augustus 2011 12:02 schreef GI het volgende:
Wat is de meerwaarde eraan om iedere keer zelf de db classe aan te moeten roepen met geinstance ?

Ik heb een $db classe die ik kan benaderen door heel mijn code, wat ik wel in iedere classe moet doen is in de __construct zorgen dat $this->db een referentie is naar de $db.

Hierdoor kan ik overal (hoe diep ik ook zit) met $this->db->runSQL("SQL_SHORT",$parameter1,$parameter2) de query die ik wil uitvoeren...
Je doet het alleen op de plaatsen waar het nodig is. Sommige classes maken geen gebruik van de database, maar bij je voorbeeld geef je toch je database door en wordt er toch geheugen in genomen.

Door gebruik te maken van Singleton patroon kun je op de plaats waar je wil je database oproepen door $db = DataBase::GetInstance(); aan te roepen. De hele database is opgeslagen in de $_Instance variabel in de class en deze wordt tijdelijk doorgegeven aan de variabel.

Conclusie: je hoeft niet lastig steeds je database door te geven.
GIdonderdag 18 augustus 2011 @ 12:12
quote:
0s.gif Op donderdag 18 augustus 2011 12:08 schreef Pakspul het volgende:

[..]

Je doet het alleen op de plaatsen waar het nodig is. Sommige classes maken geen gebruik van de database, maar bij je voorbeeld geef je toch je database door en wordt er toch geheugen in genomen.

Door gebruik te maken van Singleton patroon kun je op de plaats waar je wil je database oproepen door $db = DataBase::GetInstance(); aan te roepen. De hele database is opgeslagen in de $_Instance variabel in de class en deze wordt tijdelijk doorgegeven aan de variabel.

Conclusie: je hoeft niet lastig steeds je database door te geven.
Dat snap ik. Ik heb alleen geen classes waar de database niet in gebruikt wordt dus het heeft voor mij weinig tot geen meerwaarde. Maar is het niet zo dat ik met

1
2
3
4
5
6
7
8
<?php

function __construct(){
global 
$db;
$this->db=&$db
}

?>
Ook geen extra geheugen in gebruik neem en ik dus "eenmalig in een classe in de __construct opnemen" tegenover "iedere functie die hem nodig heeft een :getinstance() uit laten voeren" als gevolg heb ?
Pakspuldonderdag 18 augustus 2011 @ 12:18
De getinstance functie kijkt alleen maar of er een instance van is, anders zorgt hij er voor dat hij deze aanroept. Mocht die al bestaan dan geeft hij hem terug.

Global vind ik geen nette oplossing. Het is door PHP gemaakt om het programmeren makkelijker te maken. Daarom heb ik voor Singleton gekozen.
GIdonderdag 18 augustus 2011 @ 13:54
quote:
0s.gif Op donderdag 18 augustus 2011 12:18 schreef Pakspul het volgende:
De getinstance functie kijkt alleen maar of er een instance van is, anders zorgt hij er voor dat hij deze aanroept. Mocht die al bestaan dan geeft hij hem terug.

Global vind ik geen nette oplossing. Het is door PHP gemaakt om het programmeren makkelijker te maken. Daarom heb ik voor Singleton gekozen.
Ja, dat snap ik, maar dat moet ik dan iedere keer doen dat ik de database aan wil spreken volgens jouw constructie. Dat vind ik niet echt een tijdbesparende oplossing eigenlijk.

Ik snap de use van de singleton wel, maar ik zou als ik hem zo gebruiken hem toch in mijn __construct aanroepen denk ik...
Pakspuldonderdag 18 augustus 2011 @ 14:35
quote:
3s.gif Op donderdag 18 augustus 2011 13:54 schreef GI het volgende:

[..]

Ja, dat snap ik, maar dat moet ik dan iedere keer doen dat ik de database aan wil spreken volgens jouw constructie. Dat vind ik niet echt een tijdbesparende oplossing eigenlijk.

Ik snap de use van de singleton wel, maar ik zou als ik hem zo gebruiken hem toch in mijn __construct aanroepen denk ik...
Tijd besparing valt echt reuze mee, je hebt het over een paar miljardste van een seconde wat ik zo heb getest :P
GIdonderdag 18 augustus 2011 @ 14:50
quote:
0s.gif Op donderdag 18 augustus 2011 14:35 schreef Pakspul het volgende:

[..]

Tijd besparing valt echt reuze mee, je hebt het over een paar miljardste van een seconde wat ik zo heb getest :P
Ik had het vooral over ontwikkeltijdbesparing ;)
Pakspuldonderdag 18 augustus 2011 @ 15:03
quote:
3s.gif Op donderdag 18 augustus 2011 14:50 schreef GI het volgende:

[..]

Ik had het vooral over ontwikkeltijdbesparing ;)
Ik ontwikkel mijzelf om dit soort dingen te proberen :P
Sitethiefvrijdag 19 augustus 2011 @ 11:24
als in $_GET['test'] ÄÖ zit, dan maakt htmlentities($data,ENT_QUOTES,UTF-8) er Ã�Ã� van, ipv ÄÖ, hoe kan ik er nou voor zorgen dat dit wél goed gaat?
Intrepidityvrijdag 19 augustus 2011 @ 11:26
Probeer eens wat met utf8_decode en utf8_encode te spelen over die GET-variabele :)
mstxvrijdag 19 augustus 2011 @ 11:29
quote:
0s.gif Op vrijdag 19 augustus 2011 11:24 schreef Sitethief het volgende:
als in $_GET['test'] ÄÖ zit, dan maakt htmlentities($data,ENT_QUOTES,UTF-8) er Ã�Ã� van, ipv ÄÖ, hoe kan ik er nou voor zorgen dat dit wél goed gaat?
Probeer eens htmlentities($data,ENT_QUOTES,"UTF-8")
The_Terminatorvrijdag 19 augustus 2011 @ 11:31
quote:
0s.gif Op vrijdag 19 augustus 2011 11:24 schreef Sitethief het volgende:
als in $_GET['test'] ÄÖ zit, dan maakt htmlentities($data,ENT_QUOTES,UTF-8) er Ã�Ã� van, ipv ÄÖ, hoe kan ik er nou voor zorgen dat dit wél goed gaat?
Is de metatag: <meta http-equiv="Content-Type" CONTENT="text/html; charset=UTF-8" /> aanwezig?

Dit kan eventueel ook: header("Content-type: text/html; charset=utf-8");
Sitethiefvrijdag 19 augustus 2011 @ 11:32
dank je mstx dat was idd het probleem :D . Komt waarschijnlijk omdat ENT_QUOTES zonder moet
:P .
Sitethiefmaandag 22 augustus 2011 @ 10:37
Waarom doet dit
1
2
3
4
5
6
<?php

$smt 
"SELECT * FROM products WHERE `ProductName` LIKE :name ";
$this->prepared->execute($smt);

?>
het wel, maar dit
$smt = "SELECT * FROM products WHERE `ProductName` LIKE %:name% ";
$this->prepared->execute($smt);
[/php]
niet?
Sitethiefmaandag 22 augustus 2011 @ 10:39
Sorry voor de tag die verkeerde gaat, kan om een of andere reden vanaf werk geen posts editten. (alle Javascript op FOK is hier kaduuk)
GlowMousemaandag 22 augustus 2011 @ 10:40
Als hij nu :name in zou vullen, ontbreken de ' om de %. Volgens mij kun je dit alleen aanpakken door de % in de string waarmee je :name vult te stoppen.
Sitethiefmaandag 22 augustus 2011 @ 10:41
Ah ja, dat werkt. Stom dat ik daar niet aan gedacht heb. Dank je :) .
mscholmaandag 22 augustus 2011 @ 11:11
quote:
0s.gif Op maandag 22 augustus 2011 10:39 schreef Sitethief het volgende:
Sorry voor de tag die verkeerde gaat, kan om een of andere reden vanaf werk geen posts editten. (alle Javascript op FOK is hier kaduuk)
op je werk worden ads geblokkeerd? :+
Sitethiefmaandag 22 augustus 2011 @ 11:15
Yup, :( .
MrNilesmaandag 22 augustus 2011 @ 14:46
Wat is een handige manier om veel files (foto's) te uploaden voor een foto-album?
En kan dat direct in een database?
Ik wil ze natuurlijk niet 1-voor-1 allemaal aanklikken.
Liever niet met ftp. Graag zou ik het foto album wat meer automatiseren, zodat anderen kunnen inloggen en een fotoalbum kunnen aanmaken.
Dus geen ftp, mapjes aanmaken op de server..dat soort dingen
themolemaandag 22 augustus 2011 @ 14:48
quote:
0s.gif Op maandag 22 augustus 2011 14:46 schreef MrNiles het volgende:
Wat is een handige manier om veel files (foto's) te uploaden voor een foto-album?
En kan dat direct in een database?
Ik wil ze natuurlijk niet 1-voor-1 allemaal aanklikken.
Liever niet met ftp. Graag zou ik het foto album wat meer automatiseren, zodat anderen kunnen inloggen en een fotoalbum kunnen aanmaken.
Dus geen ftp, mapjes aanmaken op de server..dat soort dingen
Eh die foto's in de database opslaan is niet heel erg handig en snel. Je kan je foto's denk ik beter op de server opslaan en in de database een url naar het plaatje stoppen, mocht je nog meer informatie bij het plaatje willen opslaan.

Dus een tabel met:

Id | Beschrijving | URL | andere zinnige info die je wilt opslaan.

En snel veel foto's uploaden is meestal wel ftp. :P
MrNilesmaandag 22 augustus 2011 @ 14:53
quote:
14s.gif Op maandag 22 augustus 2011 14:48 schreef themole het volgende:

[..]

Eh die foto's in de database opslaan is niet heel erg handig en snel. Je kan je foto's denk ik beter op de server opslaan en in de database een url naar het plaatje stoppen, mocht je nog meer informatie bij het plaatje willen opslaan.

Dus een tabel met:

Id | Beschrijving | URL | andere zinnige info die je wilt opslaan.

En snel veel foto's uploaden is meestal wel ftp. :P
en een zipje uploaden met foto's en deze laten unzippen op de server?
Intrepiditymaandag 22 augustus 2011 @ 14:56
quote:
0s.gif Op maandag 22 augustus 2011 14:53 schreef MrNiles het volgende:

[..]

en een zipje uploaden met foto's en deze laten unzippen op de server?
Jep, dat werkt prima, ook regelmatig ingebouwd. Het is natuurlijk niet erg laagdrempelig want niet iedere gebruiker weet hoe te zippen.
MrNilesmaandag 22 augustus 2011 @ 14:57
quote:
0s.gif Op maandag 22 augustus 2011 14:56 schreef Intrepidity het volgende:

[..]

Jep, dat werkt prima, ook regelmatig ingebouwd. Het is natuurlijk niet erg laagdrempelig want niet iedere gebruiker weet hoe te zippen.
maar degene die ik het wil laten doen die is wel zo handig :)

welke functie is dat op de server want niet alles is enabled bij mij hosting
mscholmaandag 22 augustus 2011 @ 14:59
quote:
0s.gif Op maandag 22 augustus 2011 14:57 schreef MrNiles het volgende:

[..]

maar degene die ik het wil laten doen die is wel zo handig :)

welke functie is dat op de server want niet alles is enabled bij mij hosting
http://www.php.net/manual/en/zip.requirements.php
Lightmaandag 22 augustus 2011 @ 15:00
quote:
0s.gif Op maandag 22 augustus 2011 14:53 schreef MrNiles het volgende:

[..]

en een zipje uploaden met foto's en deze laten unzippen op de server?
Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.
GlowMousemaandag 22 augustus 2011 @ 15:01
quote:
0s.gif Op maandag 22 augustus 2011 15:00 schreef Light het volgende:

[..]

Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.
Maar het werkt wel goed, zie youtube, flickr, picasa, etc.
Catbertmaandag 22 augustus 2011 @ 15:08
quote:
0s.gif Op maandag 22 augustus 2011 15:00 schreef Light het volgende:
Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.
Wat een onzin.
Lightmaandag 22 augustus 2011 @ 15:19
quote:
0s.gif Op maandag 22 augustus 2011 15:01 schreef GlowMouse het volgende:

[..]

Maar het werkt wel goed, zie youtube, flickr, picasa, etc.
Die gebruiken dan ook geen plain html file upload :) Als ze dat wel doen, zouden ze geen progress bar kunnen laten zien :)
MrNilesmaandag 22 augustus 2011 @ 15:21
quote:
0s.gif Op maandag 22 augustus 2011 15:00 schreef Light het volgende:

[..]

Kan, maar als de bestanden groter worden, is dat niet handig meer. Het http-protocol is niet echt geschikt voor het uploaden van bestanden.
Wat is groot..
alle foto's worden al geresized voordat ze worden geupload
10MB max denk ik

enne..met zlib zou dat moeten kunnen?
Sitethiefmaandag 22 augustus 2011 @ 15:35
Waarom mag dit:
1
2
3
4
5
6
<?php

SELECT 
`ProductName`
FROM `products`

?>
wel van MySQL, waar je de backticks bij ProductName weg mag laten, maar met net zo goed werkt.
Maar dit
SELECT `products.ProductName`
FROM `products`
[/php]
Mag niet, maar moet zo:
SELECT products.ProductName
FROM `products`
[/php]
Sitethiefmaandag 22 augustus 2011 @ 15:36
grr doe ik het weer.....
Catbertmaandag 22 augustus 2011 @ 15:42
Je kunt een post ook gewoon editen he? Ik vermoed dat `products.ProductName` niet mag omdat het uit 2 delen bestaat, tabel en kolom. Vermoed dat `products`.`ProductName` wel mag. Maar ik doe al jaren niks meer met MySQL.
Sitethiefmaandag 22 augustus 2011 @ 15:45
Niet als je werkgever adds op FOK blokkeert, waardoor alle Javascript functies op FOK niet werken, inclusief, quote, edit etc.
Lightmaandag 22 augustus 2011 @ 15:45
Zo geef je aan dat je de kolom "products.ProductName" uit de tabel "products" wilt selecteren:
1
2
SELECT `products.ProductName`
FROM `products`

Zo geef je aan dat je kolom "ProductName" uit de tabel "products" wilt selecteren:
1
2
SELECT `products`.`ProductName`
FROM `products`
Lightmaandag 22 augustus 2011 @ 15:45
quote:
0s.gif Op maandag 22 augustus 2011 15:45 schreef Sitethief het volgende:
Niet als je werkgever adds op FOK blokkeert, waardoor alle Javascript functies op FOK niet werken, inclusief, quote, edit etc.
Andere werkgever zoeken :+
Sitethiefmaandag 22 augustus 2011 @ 15:52
Dank je Light, klinkt eigenlijk ook best logisch :D
Catbertmaandag 22 augustus 2011 @ 16:20
quote:
0s.gif Op maandag 22 augustus 2011 15:45 schreef Light het volgende:
Andere werkgever zoeken :+
Als je continue Fokt lost dat probleem zichzelf wel op ;)
urselmaandag 22 augustus 2011 @ 16:26
quote:
0s.gif Op maandag 22 augustus 2011 15:52 schreef Sitethief het volgende:
Dank je Light, klinkt eigenlijk ook best logisch :D
Op welke van de 2 posts reageer je nu? :')
Sitethiefmaandag 22 augustus 2011 @ 16:33
@ursel, de eerste ;) .
Luchtkokermaandag 22 augustus 2011 @ 18:37
quote:
0s.gif Op maandag 22 augustus 2011 15:45 schreef Sitethief het volgende:
Niet als je werkgever adds op FOK blokkeert, waardoor alle Javascript functies op FOK niet werken, inclusief, quote, edit etc.
Niet in de tijd van je baas FOK!ken? :D
Chandlerwoensdag 24 augustus 2011 @ 15:20
Weer een htaccess vraagje voor de experts; hoe kan ik er voor zorgen dat mijn 'dynamiche' subdomeinen die beginnen met www.subdomein.domein.nl terecht (geredirected worden naar) komen op subdomein.domein.nl?
GlowMousewoensdag 24 augustus 2011 @ 15:29
Zoiets? Met %1 wijs je terug naar je RewriteCond

RewriteCond %{HTTP_HOST} ^(.*)\.www\.(.*)$
RewriteRule .* http://%1.%2%{REQUEST_URI} [R=301,L]
dirkjowoensdag 24 augustus 2011 @ 22:10
Ik heb even jullie hulp nodig, kom er zelf echt niet uit.
Ik krijg via een array data binnen met de volgende structuur:
1username (Voornaam Achternaam)

Nu wil ik dat PHP het eerste stukje pakt, dus de 'username'. Nu heb ik het met preg_replace voor elkaar gekregen om 'Voornaam Achternaam' te pakken, maar niet 'username'.

Iemand van jullie die de oplossing weet? :@
GlowMousewoensdag 24 augustus 2011 @ 22:16
Kun je die array niet beter indelen? Je kunt gewoon alles pakken tot de eerste spatie, met strpos en substr.
Tijnwoensdag 24 augustus 2011 @ 23:30
quote:
0s.gif Op woensdag 24 augustus 2011 22:16 schreef GlowMouse het volgende:
Kun je die array niet beter indelen? Je kunt gewoon alles pakken tot de eerste spatie, met strpos en substr.
Tenzij de usernames natuurlijk spaties kunnen bevatten, zoals hier op Fok! :D
Arceewoensdag 24 augustus 2011 @ 23:46
quote:
6s.gif Op woensdag 24 augustus 2011 23:30 schreef Tijn het volgende:
Tenzij de usernames natuurlijk spaties kunnen bevatten, zoals hier op Fok! :D
Dan doe je tot positie haakje minus 1. :s) (Hoewel... Jaap ( of Dirk?) :+)

Zo:
1substr($var, 0, strpos($var, '(')-1)
Tijnwoensdag 24 augustus 2011 @ 23:54
Ik wist niet dat je zo'n PHP-held was, Arcee _O_
GlowMousedonderdag 25 augustus 2011 @ 00:15
dan is strpos($var, ' (') foutongevoeliger
dirkjodonderdag 25 augustus 2011 @ 00:18
quote:
0s.gif Op woensdag 24 augustus 2011 22:16 schreef GlowMouse het volgende:
Kun je die array niet beter indelen? Je kunt gewoon alles pakken tot de eerste spatie, met strpos en substr.
Array kan ik zelf niet veel aan doen, wordt geleverd vanuit Twitter. Maar ik ga even kijken naar je strpos/substr idee. Alvast bedankt! :)
quote:
6s.gif Op woensdag 24 augustus 2011 23:30 schreef Tijn het volgende:

[..]

Tenzij de usernames natuurlijk spaties kunnen bevatten, zoals hier op Fok! :D
Twitter kent (gelukkig) geen spaties in de usernames, dus dat zou het probleem niet moeten zijn.
Ik ga het nu proberen, zal laten weten hoe het gelukt is :)
GlowMousedonderdag 25 augustus 2011 @ 00:18
welke twitter api gebruik je dan?
Tijndonderdag 25 augustus 2011 @ 00:19
quote:
0s.gif Op donderdag 25 augustus 2011 00:18 schreef dirkjo het volgende:

[..]

Twitter kent (gelukkig) geen spaties in de usernames, dus dat zou het probleem niet moeten zijn.
Ik ga het nu proberen, zal laten weten hoe het gelukt is :)
Dan kun je ook nog exploden op spatie. Het eerste element van de array die daaruit komt, is je username.
dirkjodonderdag 25 augustus 2011 @ 00:27
quote:
0s.gif Op donderdag 25 augustus 2011 00:18 schreef GlowMouse het volgende:
welke twitter api gebruik je dan?
Oke ik ben blind, ik dacht dat de enige manier van zoeken op twitter de volgende was:
1http://search.twitter.com/search.atom?lang=en&q=fok!

Nu heb ik alleen de GET Search volledig over het hoofd gezien :@

Nu ga ik wel eerst proberen om het via de eerste methode te doen, deze heeft namelijk geen rate limit. Jullie horen nog wel wat het uiteindelijk is geworden, ga er nu mee aan de slag
dirkjodonderdag 25 augustus 2011 @ 00:42
De explode manier werkt, alleen botste ik op het probleem dat de curl optie maar iets van 15 mensen geeft.

Ga dus toch gebruik maken van de GET Search. In ieder geval bedankt :)
GlowMousedonderdag 25 augustus 2011 @ 00:48
Het enige wat je moet doen, is atom door json vervangen. En met rpp en page kun je pagineren.
dirkjodonderdag 25 augustus 2011 @ 03:10
Het is (zo goed als) af. Voor het eerst dat ik volledig zelf zo'n 'lasstig' script heb geschreven :9
Thanks guys :)
cablegunmasterdonderdag 25 augustus 2011 @ 14:59
1
2
3
4
5
6
7
8
9
10
11
<?php

<dl>
        <
dt><label>Afgeleverd op:</label></dt>
    <
dd>
        
Woensdag 24/08/2011
        op 14
:45
    
</dd>
</
dl>

?>

Vraagje hoe kan ik deze code van de pagina lenen? ik weet de pagina maar nu is de vraag hoe ik alles tussen <dd> en </dd> eraf kan halen met identifier: <dt><label>Afgeleverd op:</label></dt>

Probleem is dat ik de pagina niet zelf beheer waarop dit staat waardoor simpele preg _matches niet werken :o. en ik snap nog niet hoe ik het zo van een andere pagina kan halen.

[ Bericht 3% gewijzigd door cablegunmaster op 25-08-2011 15:08:48 ]
Sitethiefdonderdag 25 augustus 2011 @ 15:30
quote:
17s.gif Op donderdag 25 augustus 2011 14:59 schreef cablegunmaster het volgende:

[ code verwijderd ]

Vraagje hoe kan ik deze code van de pagina lenen? ik weet de pagina maar nu is de vraag hoe ik alles tussen <dd> en </dd> eraf kan halen met identifier: <dt><label>Afgeleverd op:</label></dt>

Probleem is dat ik de pagina niet zelf beheer waarop dit staat waardoor simpele preg _matches niet werken :o. en ik snap nog niet hoe ik het zo van een andere pagina kan halen.
Pak de source code en gooi deze door een custom geschreven parser?
cablegunmasterdonderdag 25 augustus 2011 @ 15:31
quote:
0s.gif Op donderdag 25 augustus 2011 15:30 schreef Sitethief het volgende:

[..]

Pak de source code en gooi deze door een custom geschreven parser?
probleem 1 parser? :P ergens een begin eraan :)?
hoe begin ik hieraan ^^?
Pakspuldonderdag 25 augustus 2011 @ 15:32
quote:
17s.gif Op donderdag 25 augustus 2011 14:59 schreef cablegunmaster het volgende:

[ code verwijderd ]

Vraagje hoe kan ik deze code van de pagina lenen? ik weet de pagina maar nu is de vraag hoe ik alles tussen <dd> en </dd> eraf kan halen met identifier: <dt><label>Afgeleverd op:</label></dt>

Probleem is dat ik de pagina niet zelf beheer waarop dit staat waardoor simpele preg _matches niet werken :o. en ik snap nog niet hoe ik het zo van een andere pagina kan halen.
DOM standaard in PHP kun je hier heel mooi voor gebruiken, dan pak je gewoon de waarde van bepaalde elementen.

http://www.php.net/manual/en/book.dom.php

Google even naar wat voorbeelden en je kunt het zo toepassen.,
mstxdonderdag 25 augustus 2011 @ 15:37
quote:
0s.gif Op donderdag 25 augustus 2011 15:32 schreef Pakspul het volgende:

[..]

DOM standaard in PHP kun je hier heel mooi voor gebruiken, dan pak je gewoon de waarde van bepaalde elementen.

http://www.php.net/manual/en/book.dom.php

Google even naar wat voorbeelden en je kunt het zo toepassen.,
Ik gebruik deze: http://simplehtmldom.sourceforge.net/
Werkt super simpel.
Sitethiefdonderdag 25 augustus 2011 @ 16:28
quote:
0s.gif Op donderdag 25 augustus 2011 15:37 schreef mstx het volgende:

[..]

Ik gebruik deze: http://simplehtmldom.sourceforge.net/
Werkt super simpel.
Oeh vet handig, thanks voor de link. Alleen jammer dat het JQuery style is en niet MooTools, maar dan nog.
mstxdonderdag 25 augustus 2011 @ 16:35
quote:
0s.gif Op donderdag 25 augustus 2011 16:28 schreef Sitethief het volgende:

[..]

Oeh vet handig, thanks voor de link. Alleen jammer dat het JQuery style is en niet MooTools, maar dan nog.
De Mootools $$() functie werkt (bijna) hetzelfde als de JQuery $() functie. Dus in dit geval zit er geen verschil tussen "JQuery style" en "Mootools style".
Sitethiefdonderdag 25 augustus 2011 @ 16:56
Kijk, dat wist ik dan weer niet :). Mooi ^O^ .
Lamzak_vrijdag 26 augustus 2011 @ 17:25
Ik heb een probleem.

Ik heb een online applicatie.

Deze applicatie zorgt ervoor dat een andere applicatie aangeroepen wordt.
Deze draait op de server en genereerd een PDF bestand.

De site moet checken of de PDF gegenereerd is. Zodra dit klaar is moet die automatisch geopend worden. Dat PDF bestand genereren duurt ongeveer 45 seconden. Ik wil gedurende 90 seconden elke vijf seconden een query op een database uitvoeren, want daaruit kan ik halen of de pdf klaar is.

Als die klaar is, moet hij gelijk geopend worden. Als hij na 90 seconden nog niet klaar is moet er een time-out error komen.

Hoe moet ik dit in hemelsnaam doen.
mscholvrijdag 26 augustus 2011 @ 17:31
quote:
0s.gif Op vrijdag 26 augustus 2011 17:25 schreef Lamzak_ het volgende:
Ik heb een probleem.

Ik heb een online applicatie.

Deze applicatie zorgt ervoor dat een andere applicatie aangeroepen wordt.
Deze draait op de server en genereerd een PDF bestand.

De site moet checken of de PDF gegenereerd is. Zodra dit klaar is moet die automatisch geopend worden. Dat PDF bestand genereren duurt ongeveer 45 seconden. Ik wil gedurende 90 seconden elke vijf seconden een query op een database uitvoeren, want daaruit kan ik halen of de pdf klaar is.

Als die klaar is, moet hij gelijk geopend worden. Als hij na 90 seconden nog niet klaar is moet er een time-out error komen.

Hoe moet ik dit in hemelsnaam doen.
roep applicatie op server aan en retouneer aan de gebruiker een"even wachten" pagina waar je met Jquery elke 5 seconden een check doet op de database?

geen idee of het de meest efficiente manier is, maar denk ik wel de meest gebruikersvriendelijke manier :P
Ouqzvrijdag 26 augustus 2011 @ 17:31
quote:
0s.gif Op vrijdag 26 augustus 2011 17:25 schreef Lamzak_ het volgende:
Ik heb een probleem.

Ik heb een online applicatie.

Deze applicatie zorgt ervoor dat een andere applicatie aangeroepen wordt.
Deze draait op de server en genereerd een PDF bestand.

De site moet checken of de PDF gegenereerd is. Zodra dit klaar is moet die automatisch geopend worden. Dat PDF bestand genereren duurt ongeveer 45 seconden. Ik wil gedurende 90 seconden elke vijf seconden een query op een database uitvoeren, want daaruit kan ik halen of de pdf klaar is.

Als die klaar is, moet hij gelijk geopend worden. Als hij na 90 seconden nog niet klaar is moet er een time-out error komen.

Hoe moet ik dit in hemelsnaam doen.
Heb je ervaring met PHP of is het stellen van deze vraag in dit topic een gokje? Wat is trouwens het doel dat je wilt bereiken met het openen van de PDF als hij klaar is?
cablegunmastervrijdag 26 augustus 2011 @ 17:39
ik krijg de hele tijd met een count query de verkeerde waarde's eruit. nu vraag ik me af of dit aan de join kan liggen? Ik krijg gekke waarde's als 7- 15, terwijl er maar 3 rijen aan de query voldoen als ik gewoon alle velden oproep met een *.
Pakspulvrijdag 26 augustus 2011 @ 17:40
quote:
17s.gif Op vrijdag 26 augustus 2011 17:39 schreef cablegunmaster het volgende:
ik krijg de hele tijd met een count query de verkeerde waarde's eruit. nu vraag ik me af of dit aan de join kan liggen? Ik krijg gekke waarde's als 7- 15, terwijl er maar 3 rijen aan de query voldoen als ik gewoon alle velden oproep met een *.
JOIN verkeerd? Vooral handig dat je de query niet toont dan kunnen we je heel goed helpen :')
cablegunmastervrijdag 26 augustus 2011 @ 17:41
quote:
0s.gif Op vrijdag 26 augustus 2011 17:40 schreef Pakspul het volgende:

[..]

JOIN verkeerd? Vooral handig dat je de query niet toont dan kunnen we je heel goed helpen :')
nah de join is goed :) , kwam erop neer dat hij de count uitvoert op de tabel waar FROM staat.
zit de hele tijd in phpmyadmin uit te testen. query is niet belangrijk.
count negeert de left join. :{

1
2
3
4
5
6
SELECT *
FROM product_prijzen
LEFT JOIN levering_datum
ON product_prijzen.lever_id = levering_datum.id
WHERE product_id = '45'
group by levering
Dit wil hij gewoon doen. maar zodra ik er een count bij zet count hij alleen
waar product_id = 45 en negeert hij de hele join. dat is het geval.

Resultaat is 37 terwijl er maar 3 regels staan als ik de hele left join weghaal geeft hij alle 37 regels weer die ik niet wil hebben maar alleen de join count wil ik hebben.

dus probeerde ik te specificeren met
1
2
3
4
5
SELECT count( levering_datum.levering )
FROM product_prijzen
LEFT JOIN levering_datum ON product_prijzen.lever_id = levering_datum.id
WHERE product_id = '45'
GROUP BY levering

krijg ik er 7, 15,15 uit wat eigenlijk hetzelfde is.

[ Bericht 14% gewijzigd door cablegunmaster op 26-08-2011 17:52:43 ]
#ANONIEMvrijdag 26 augustus 2011 @ 17:44
Vooral geen code posten, waarom zou je het makkelijker maken dan nodig is?
The_Terminatorvrijdag 26 augustus 2011 @ 17:56
quote:
17s.gif Op vrijdag 26 augustus 2011 17:41 schreef cablegunmaster het volgende:

[..]

nah de join is goed :) , kwam erop neer dat hij de count uitvoert op de tabel waar FROM staat.
zit de hele tijd in phpmyadmin uit te testen. query is niet belangrijk.
count negeert de left join. :{
[ code verwijderd ]

Dit wil hij gewoon doen. maar zodra ik er een count bij zet count hij alleen
waar product_id = 45 en negeert hij de hele join. dat is het geval.

Resultaat is 37 terwijl er maar 3 regels staan als ik de hele left join weghaal geeft hij alle 37 regels weer die ik niet wil hebben maar alleen de join count wil ik hebben.

dus probeerde ik te specificeren met
[ code verwijderd ]

krijg ik er 7, 15,15 uit wat eigenlijk hetzelfde is.
En als je een right join doet ipv een left join?
cablegunmastervrijdag 26 augustus 2011 @ 17:58
quote:
0s.gif Op vrijdag 26 augustus 2011 17:56 schreef The_Terminator het volgende:

[..]

En als je een right join doet ipv een left join?
Dan krijg ik het hetzelfde eruit het probleem is als volgt.

ik wil een count uitvoeren; alleen door de group by krijg ik heel mooi 3 regels terug.
Alleen de count negeert de group by en telt alle regels bij elkaar.

Zal ik het anders moeten ombouwen tot een sub-query, ach kan het altijd proberen =).

Fixed met subquery , voor interesse alsnog een antwoord weten of dit kan met een join :) .

[ Bericht 2% gewijzigd door cablegunmaster op 26-08-2011 18:12:10 ]
The_Terminatorvrijdag 26 augustus 2011 @ 18:15
quote:
11s.gif Op vrijdag 26 augustus 2011 17:58 schreef cablegunmaster het volgende:

[..]


Fixed met subquery , voor interesse alsnog een antwoord weten of dit kan met een join :) .
Ik was er net achter idd, subquery met enkel een COUNT(*) geeft het aantal terug van de query die erbinnen zit.
Lightvrijdag 26 augustus 2011 @ 19:12
quote:
0s.gif Op vrijdag 26 augustus 2011 17:56 schreef The_Terminator het volgende:

[..]

En als je een right join doet ipv een left join?
Dan schrijf je slecht onderhoudbare code.
The_Terminatorvrijdag 26 augustus 2011 @ 20:40
quote:
0s.gif Op vrijdag 26 augustus 2011 19:12 schreef Light het volgende:

[..]

Dan schrijf je slecht onderhoudbare code.
True, echter was het maar een probeersel wat uiteindelijk niet bleek te werken. Ik heb namelijk een keer hetzelfde probleem gehad en wist niet meer hoe ik het had opgelost. Mocht het wel werken dan is de boel altijd nog aan te passen zodat het wel duidelijk en goed te onderhouden is.

Als ik dingen ga testen dan is het in den beginne sowieso nooit de meest elegante code, ik pas het dan aan zodra het naar wens functioneerd.
GlowMousevrijdag 26 augustus 2011 @ 21:11
quote:
0s.gif Op vrijdag 26 augustus 2011 19:12 schreef Light het volgende:

[..]

Dan schrijf je slecht onderhoudbare code.
wie heeft je dat verteld?
cablegunmastervrijdag 26 augustus 2011 @ 21:22
quote:
10s.gif Op vrijdag 26 augustus 2011 21:11 schreef GlowMouse het volgende:

[..]

wie heeft je dat verteld?
_O-
Lightvrijdag 26 augustus 2011 @ 22:35
quote:
10s.gif Op vrijdag 26 augustus 2011 21:11 schreef GlowMouse het volgende:

[..]

wie heeft je dat verteld?
Ik zelf :) Maar da's gewoon simpel beredeneerd. Left joins zijn bekend en worden veel gebruikt. Right joins worden een stuk minder (lees: vrijwel nooit) gebruikt. Alleen al daarom zijn right joins minder onderhoudbaar. En, maar dat kan ook aan mijn beperkte kennis liggen, volgens mij is er niets wat wel kan met een right join en niet met een left join.
GlowMousevrijdag 26 augustus 2011 @ 23:07
da's waar, je kunt altijd de tabellen omdraaien in je query
urselzaterdag 27 augustus 2011 @ 00:41
Wat kan een mens toch blij worden als een geniaal stukje code nog eens blijkt te werken, *O*
Flepkezaterdag 27 augustus 2011 @ 20:07
quote:
0s.gif Op zaterdag 27 augustus 2011 00:41 schreef ursel het volgende:
Wat kan een mens toch blij worden als een geniaal stukje code nog eens blijkt te werken, *O*
MotivationalProgramming_3.jpg
Flepkezaterdag 27 augustus 2011 @ 20:15
Iemand trouwens nog goede tutorials/trucjes voor betere leesbaarheid/kortere code?
Ik heb bijvoorbeeld nooit geweten dat:
1
2
3
4
5
6
7
8
9
10
<?php
$rows 
$db->getALL('SELECT "shit" FROM "database" ');
$i="";
foreach ( 
$rows as $row )

      
$var[$i] = $row["lol"];
      
$i++;
}
print_r($var);
?>
Ook kan als:
1
2
3
4
5
6
7
8
<?php
$rows 
$db->getALL('SELECT "shit" FROM "database" ');
foreach ( 
$rows as $row )

      
$var[] = $row["lol"];
}
print_r($var);
?>
Als ik zoek op shorthand php kom ik alleen maar dingen tegen voor controle structuren / andere basic dingen.
Tijnzaterdag 27 augustus 2011 @ 20:40
quote:
14s.gif Op zaterdag 27 augustus 2011 20:15 schreef Flepke het volgende:
Iemand trouwens nog goede tutorials/trucjes voor betere leesbaarheid/kortere code?
Ik heb bijvoorbeeld nooit geweten dat:
[ code verwijderd ]

Ook kan als:
[ code verwijderd ]

Als ik zoek op shorthand php kom ik alleen maar dingen tegen voor controle structuren / andere basic dingen.
Die curly braces zijn ook niet nodig, evenals het opslaan van het resultaat van $db->getALL in een aparte variabele.

Het zou dus zelfs op één regel kunnen :P

1
2
3
4
5
<?php

foreach ($db->getALL('SELECT "shit" FROM "database" ') as $row$var[] = $row["lol"];

?>
Tijnzaterdag 27 augustus 2011 @ 20:44
Wat ik zelf trouwens vaak gebruik is de alternatieve if syntax, zeker om bv een variabele te zetten op basis van een voorwaarde. Ipv van dit:

1
2
3
4
5
6
7
8
9
10
11
12
<?php

if(voorwaarde)
{
    
$var iets;
}
else
{
    
$var iets_anders;
}

?>

doe ik vaak dit

1
2
3
4
5
<?php

$var 
= (voorwaarde) ? iets iets_anders;

?>
Thomasszaterdag 27 augustus 2011 @ 20:46
quote:
14s.gif Op zaterdag 27 augustus 2011 20:15 schreef Flepke het volgende:
Iemand trouwens nog goede tutorials/trucjes voor betere leesbaarheid/kortere code?
Ik heb bijvoorbeeld nooit geweten dat:
[ code verwijderd ]

Ook kan als:
[ code verwijderd ]

Als ik zoek op shorthand php kom ik alleen maar dingen tegen voor controle structuren / andere basic dingen.
Dat is best wel basic :P.

quote:
14s.gif Op zaterdag 27 augustus 2011 20:44 schreef Tijn het volgende:
Wat ik zelf trouwens vaak gebruik is de alternatieve if syntax, zeker om bv een variabele te zetten op basis van een voorwaarde. Ipv van dit:
[ code verwijderd ]

doe ik vaak dit
[ code verwijderd ]

Kan ook zo:

1
2
3
<?php
($is_dit_waar) && (print 'ja') || print 'nee'
?>

En nog een grappige:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$a 
'hoi';

// i.p.v. het volgende
echo isset($a) ? "a" "b"// geeft a

unset($a);

// doe dit
echo $a ?: "b"// geeft "b"

?>
Sitethiefmaandag 29 augustus 2011 @ 11:36
Klopt het dat in MyISAM je met PDO->execute alleen parameters kunt meegeven aan SELECT statements en niet aan bijv. INSERT, want daar gaat het bij mij mis. SELECT gaat prima, maar INSERT weigert gewoon de parameters te gebruiken die ik meegeef.
Intrepiditymaandag 29 augustus 2011 @ 13:51
quote:
0s.gif Op maandag 29 augustus 2011 11:36 schreef Sitethief het volgende:
Klopt het dat in MyISAM je met PDO->execute alleen parameters kunt meegeven aan SELECT statements en niet aan bijv. INSERT, want daar gaat het bij mij mis. SELECT gaat prima, maar INSERT weigert gewoon de parameters te gebruiken die ik meegeef.
Nergens last van, ik gebruik het gewoon bij ieder soort query. Krijg je een melding terug van je database en/of PDO?
Sitethiefmaandag 29 augustus 2011 @ 14:13
Nee
1
2
3
4
5
<?php

INSERT INTO 
`products`  (`ProductName`) VALUES (':name')

?>

Alles wat er gebeurt is dat :name in de database wordt ingevuld, ipv wat ik meegeef. Als ik precies dezelfde functions gebruik om een SELECT te doen werkt het wel.
remi1986maandag 29 augustus 2011 @ 14:16
quote:
0s.gif Op maandag 29 augustus 2011 14:13 schreef Sitethief het volgende:
Nee
[ code verwijderd ]

Alles wat er gebeurt is dat :name in de database wordt ingevuld, ipv wat ik meegeef. Als ik precies dezelfde functions gebruik om een SELECT te doen werkt het wel.
Moet je geen $name gebruiken?
Intrepiditymaandag 29 augustus 2011 @ 14:16
quote:
0s.gif Op maandag 29 augustus 2011 14:13 schreef Sitethief het volgende:
Nee
[ code verwijderd ]

Alles wat er gebeurt is dat :name in de database wordt ingevuld, ipv wat ik meegeef. Als ik precies dezelfde functions gebruik om een SELECT te doen werkt het wel.
Je moet :name niet tussen aanhalingstekens zetten, dit doet PDO zelf. Nu gebruik je de string :name als waarde.
Dus gewoon:
quote:
INSERT INTO `products` (`ProductName`) VALUES (:name)
Sitethiefmaandag 29 augustus 2011 @ 14:22
Ah, dat ging er dus fout, dank je, en bij de SELECT werd de query al wel correct opgebouwd... :D
MrNilesdonderdag 1 september 2011 @ 16:02
ik kijk er volgens mij helemaal langs..

error: Undefined index: file

dit is het form:
1
2
3
4
5
6
7
8
<?php
<form method="post" action="verwijderext.php" enctype="multipart/form-data">
<
label for="file">Filename:</label>
<
input type="file" name="file" id="file" />
<
br />
<
input type="submit" name="submit" value="Submit" />
</
form>
?>

in de verwijdersext.php staat oa
echo $_FILES["file"]["name"]
maar dan krijg ik dus error: Undefined index: file

print_r ($_FILES); geeft
Array ( [Name] => Array ( [name] => blabla.zip

maar ik krijg er de naam niet uit
waar ga ik fout?
GlowMousedonderdag 1 september 2011 @ 16:12
$_FILES['Name'] werkt, aan je print_r te zien. Ik geloof daarom niet dat je het eerste script voor uploaden gebruikt.
Catbertdonderdag 1 september 2011 @ 18:10
quote:
2s.gif Op vrijdag 26 augustus 2011 22:35 schreef Light het volgende:
Ik zelf :) Maar da's gewoon simpel beredeneerd.
Nogal ja :')
MrNilesvrijdag 2 september 2011 @ 13:45
quote:
0s.gif Op donderdag 1 september 2011 16:12 schreef GlowMouse het volgende:
$_FILES['Name'] werkt, aan je print_r te zien. Ik geloof daarom niet dat je het eerste script voor uploaden gebruikt.
dit is de juiste print_r
Array ( [file] => Array ( [name] => mrniles.zip [type] => application/x-zip-compressed [tmp_name] => /tmp/phpUldFUG [error] => 0 [size] => 45758 ) )
GlowMousevrijdag 2 september 2011 @ 13:46
dan werkt echo $_FILES["file"]["name"]; gewoon.
MrNilesvrijdag 2 september 2011 @ 13:50
quote:
0s.gif Op vrijdag 2 september 2011 13:46 schreef GlowMouse het volgende:
dan werkt echo $_FILES["file"]["name"]; gewoon.
$Name= $_FILES['file'];
echo$Name;

geeft op scherm: Array
Tijnvrijdag 2 september 2011 @ 13:51
quote:
0s.gif Op vrijdag 2 september 2011 13:50 schreef MrNiles het volgende:

[..]

$Name= $_FILES['file'];
echo$Name;

geeft op scherm: Array
Dat is heel wat anders dan dit

1
2
3
<?php
echo $_FILES["file"]["name"]
?>
MrNilesvrijdag 2 september 2011 @ 13:52
quote:
2s.gif Op vrijdag 2 september 2011 13:51 schreef Tijn het volgende:

[..]

Dat is heel wat anders dan dit
[ code verwijderd ]

ik kom er nu achter :)
wat is het verschil precies?
GlowMousevrijdag 2 september 2011 @ 13:53
$Name= $_FILES['file'];
echo$Name;

is hetzelfde als:
$bla = $_FILES['file'];
echo $bla;

of als:
echo $_FILES['file'];
Teganvrijdag 2 september 2011 @ 13:56
$_FILES["file"]["name"] is gewoon een array array's waar $Name= $_FILES['file']; een array een andere naam geven is ofzo
MrNilesvrijdag 2 september 2011 @ 13:56
quote:
0s.gif Op vrijdag 2 september 2011 13:53 schreef GlowMouse het volgende:
$Name= $_FILES['file'];
echo$Name;

is hetzelfde als:
$bla = $_FILES['file'];
echo $bla;

of als:
echo $_FILES['file'];
dat snap ik maar wat gebeurt er nu extra als er $_FILES['file'][name'] staat
Teganvrijdag 2 september 2011 @ 13:57
Niets want $_FILES['file'][name'] bestaat nog niet neem ik aan. Dus error?
MrNilesvrijdag 2 september 2011 @ 13:58
quote:
0s.gif Op vrijdag 2 september 2011 13:57 schreef Tegan het volgende:
Niets want $_FILES['file'][name'] bestaat nog niet neem ik aan. Dus error?
toch wel...dan krijg ik mrniles.zip te zien
GlowMousevrijdag 2 september 2011 @ 14:00
wat wil je dan?
$bla = $_FILES['file'];
echo $bla['naam'];
Teganvrijdag 2 september 2011 @ 14:00
quote:
0s.gif Op vrijdag 2 september 2011 13:58 schreef MrNiles het volgende:

[..]

toch wel...dan krijg ik mrniles.zip te zien
Dan bestond die array array's al wel.

Maar het punt blijft dat die twee dingen niet gelijk aan elkaar zijn :).
remi1986vrijdag 2 september 2011 @ 14:00
quote:
0s.gif Op vrijdag 2 september 2011 13:58 schreef MrNiles het volgende:

[..]

toch wel...dan krijg ik mrniles.zip te zien
Als je een print_r van $_FILES doet, zie je precies hoe de array er na de POST uitziet. En let op hoofdletters. Is PHP gevoelig voor.
Dalandozondag 4 september 2011 @ 21:51
Hoe kan ik kijken of een string in een externe webpagina zit?
Swetseneggerzondag 4 september 2011 @ 21:53
quote:
7s.gif Op zondag 4 september 2011 21:51 schreef Dalando het volgende:
Hoe kan ik kijken of een string in een externe webpagina zit?
http://nl.php.net/manual/en/function.file.php
Dalandozondag 4 september 2011 @ 21:56
quote:
1
2
3
4
5
6
7
8
<?php


if(stristr(file('http://google.com'), 'zoek')){
//doorgaan
}

?>

werkt hier niet.
Swetseneggerzondag 4 september 2011 @ 22:02
quote:
7s.gif Op zondag 4 september 2011 21:56 schreef Dalando het volgende:

[..]
[ code verwijderd ]

werkt hier niet.
Als je die link goed bekeken had, had je kunnen lezen dat 'file' content in een array inleest die jij vervolgens met een stristr probeert te doorzoeken. Er staat ook bij dat file_get_contents precies hetzelfde doet, maar de boel dan in een string zet....
Dalandozondag 4 september 2011 @ 22:10
quote:
4s.gif Op zondag 4 september 2011 22:02 schreef Swetsenegger het volgende:

[..]

Als je die link goed bekeken had, had je kunnen lezen dat 'file' content in een array inleest die jij vervolgens met een stristr probeert te doorzoeken. Er staat ook bij dat file_get_contents precies hetzelfde doet, maar de boel dan in een string zet....
1
2
3
4
5
6
<?php


if(in_array('zoek'file('http://google.nl/'))){

?>

doet het ook niet.
PiRANiAzondag 4 september 2011 @ 22:21
file -> file_get_contents ^O^.
Pakspulzondag 4 september 2011 @ 22:22
quote:
7s.gif Op zondag 4 september 2011 22:10 schreef Dalando het volgende:

[..]
[ code verwijderd ]

doet het ook niet.
En als je even handmatig de array nakijkt dan zie je wel dat 'zoek' er in voorkomt? Weet niet of in_array hoofdletter gevoelig is.
Dalandozondag 4 september 2011 @ 22:23
quote:
14s.gif Op zondag 4 september 2011 22:21 schreef PiRANiA het volgende:
file -> file_get_contents ^O^.
ik heb ze beiden geprobeerd. :{
Swetseneggerzondag 4 september 2011 @ 22:28
quote:
7s.gif Op zondag 4 september 2011 22:10 schreef Dalando het volgende:

[..]
[ code verwijderd ]

doet het ook niet.
1
2
3
4
5
6
7
8
9
10
<?php

$iets
=file_get_contents('http://google.nl/');
if(
stristr($iets'poep') === FALSE) {
echo 
'nee';
}else{
echo 
'ja';
}

?>
1nee

1
2
3
4
5
6
7
8
9
10
<?php

$iets
=file_get_contents('http://google.nl/');
if(
stristr($iets'zoeken') === FALSE) {
echo 
'nee';
}else{
echo 
'ja';
}

?>
1ja
GlowMousezondag 4 september 2011 @ 22:32
als je http://nl3.php.net/manual/en/function.strstr.php goed leest, leer je nog meer
Dalandozondag 4 september 2011 @ 22:32
quote:
0s.gif Op zondag 4 september 2011 22:28 schreef Swetsenegger het volgende:

[..]
[ code verwijderd ]


[ code verwijderd ]


[ code verwijderd ]


[ code verwijderd ]

Hehe :') Er zat iets fout aan mijn kant, sorry :@ Maar het werkt wel, ik nogsteeds te kloten met file. Dankje alsnog voor alle hulp ^O^
Dalandozondag 4 september 2011 @ 22:32
quote:
14s.gif Op zondag 4 september 2011 22:32 schreef GlowMouse het volgende:
als je http://nl3.php.net/manual/en/function.strstr.php goed leest, leer je nog meer
Gelukkig had ik het ook over stristr en niet strstr :*
GlowMousezondag 4 september 2011 @ 23:01
quote:
7s.gif Op zondag 4 september 2011 22:32 schreef Dalando het volgende:

[..]

Gelukkig had ik het ook over stristr en niet strstr :*
Gelukkig ben ik niet blind.
Sitethiefmaandag 5 september 2011 @ 16:21
Waarom duurt een SELECT query op 1 miljoen records met een ORDER BY tot 5650 records (5601-5650 in de LIMIT) onder de 1 seconde (+/- 0,3), en zodra je hoger dan dat gaat duurt het eeuwig..... Is dit een of andere magische grens ofzo? Zonder ORDER BY duurt deze query altijd rond de 0,3 seconde...

Database is MyISAM trouwens op een lokale dev machine.

Query:
1
2
3
<?php
SELECT products
.ProductNameproducts.ProductID FROM `productsWHERE products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5650,5700
?>
Sitethiefmaandag 5 september 2011 @ 16:23
Heel erg vaag dit

1
2
3
4
5
6
7
8
<?php

SELECT products
.ProductNameproducts.ProductID FROM `productsWHERE products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5650,5700;
/* 0 rows affected, 5.700 rows found. Duration for 1 query: 42,125 sec. (+ 0,562 sec. network) */
SELECT products.ProductNameproducts.ProductID FROM `productsWHERE products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5601,5650;
/* 0 rows affected, 5.650 rows found. Duration for 1 query: 0,156 sec. (+ 0,125 sec. network) */

?>
GlowMousemaandag 5 september 2011 @ 16:35
Er wordt een index op ProductID gebruikt he? Hij stopt zodra hij 5700 rijen gevonden heeft met %la%. Hij kan de eerste 5650 heel snel vinden, en de laatste heel langzaam omdat er dan veel rijen zijn die er niet aan voldoen. Doet het maar eens zo, dan zie je het gebeuren:

SET @a:=1;
SELECT @a,products.ProductName, products.ProductID FROM `products` WHERE (@a:=@a+1) AND products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5650,5700;
Sitethiefmaandag 5 september 2011 @ 16:40
1
2
3
4
5
6
7
<?php

SET 
@a:=1;
 
SELECT @a,products.ProductNameproducts.ProductID FROM `productsWHERE (@a:=@a+1) AND products.ProductName LIKE '%la%' ORDER BY products.ProductID ASC LIMIT 5650,5700;
/* 0 rows affected, 5.700 rows found. Duration for 2 queries: 3,203 sec. (+ 0,016 sec. network) */

?>
Dit gaat mijn MySQL kennis te boven..... :P. Maar hier op de afdeling werd ook al gezegd dat ik eens naar de index moet kijken.... Maar idd, ID is de index. Grappig genoeg sorteerd een query zonder ORDER BY automatisch op de index..... maar ja, ik wil sorteerbare collums in mijn HTML :X
GlowMousemaandag 5 september 2011 @ 16:43
Wel kijken naar wat hij teruggeeft voor @a!
Sitethiefmaandag 5 september 2011 @ 16:49
1.031.768
(precies het aantal records met eentje meer)
GlowMousemaandag 5 september 2011 @ 16:50
Per rij natuurlijk, en dan met de limiet spelen.
-Datdus-dinsdag 6 september 2011 @ 10:44
Kan iemand mij makkelijk uitleggen hoe ik een array laat loopen met foreach? Het wil niet lukken met gegevens uit de database. -O-
GlowMousedinsdag 6 september 2011 @ 10:45
wat is je huidige code?
Tijndinsdag 6 september 2011 @ 10:48
quote:
7s.gif Op dinsdag 6 september 2011 10:44 schreef -Datdus- het volgende:
Kan iemand mij makkelijk uitleggen hoe ik een array laat loopen met foreach? Het wil niet lukken met gegevens uit de database. -O-
Kun je een stukje output laten zien van print_r($jouw_array)?

En wil je de inhoud van de array alleen weergeven of wil je de inhoud van de array wijzigen?
-Datdus-dinsdag 6 september 2011 @ 10:52
1
2
3
4
5
6
7
8
9
Array
(
    [posts] => Array
        (
            [title] => Dit is een test
            [body] => Body
        )

)

Print_r geeft het bovenstaande terug. Hij haalt op dit moment alleen het eerste item op.

Code:

1
2
3
4
5
6
7
8
9
10
        $sql = mysql_query("SELECT * FROM posts");
        
        $row = mysql_fetch_assoc($sql);
             
        $posts = array('posts' => array('title' => $row['title'], 'body' => $row['body']));
        
        foreach($posts as $post){
            echo $post['title']."<br>";
            echo $post['body'];
        }
mstxdinsdag 6 september 2011 @ 11:07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

        $sql 
mysql_query("SELECT title, body FROM posts");
        
        
$posts = array();
        while (
$row mysql_fetch_assoc($sql)){
            
$posts[] = $row;
        }

        
        foreach(
$posts as $post){
            echo 
$post['title']."<br>";
            echo 
$post['body'];
        }

?>
Direct in de while{} echo-en kan natuurlijk ook (8>
-Datdus-dinsdag 6 september 2011 @ 11:10
quote:
0s.gif Op dinsdag 6 september 2011 11:07 schreef mstx het volgende:

[ code verwijderd ]

Het werkt. Ik snap alleen niet wat die while loop doet. :)
Sitethiefdinsdag 6 september 2011 @ 11:19
Zolang mysql_fetch_assoc($sql) rows terug geeft, blijft de loop die in $posts stoppen. Zo stop je row voor row in $posts.
-Datdus-dinsdag 6 september 2011 @ 11:23
quote:
0s.gif Op dinsdag 6 september 2011 11:19 schreef Sitethief het volgende:
Zolang mysql_fetch_assoc($sql) rows terug geeft, blijft de loop die in $posts stoppen. Zo stop je row voor row in $posts.
Ah, oke ik denk dat ik het snap dankjewel. :)
Chandlerdinsdag 6 september 2011 @ 11:23
Waarom gebruik je niet de uitleg van php.net?

http://nl.php.net/array
http://nl.php.net/while
http://nl.php.net/foreach

het zou mooier zijn om het zo te doen!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

        
        $sql 
"SELECT title, body FROM posts";
        
$query mysql_query($sql);
        
$items mysql_num_rows($query); 

        for (
$x 0$x $items$x++)
        {
            
$post mysql_fetch_assoc($query);

            echo 
$post['title']."<br>";
            echo 
$post['body'];
        }

?>

http://nl.php.net/for
http://nl.php.net/mysql_num_rows

ps... als je een query opbouwt plaats je die in $sql
als je een query uitvoert noem je die in het algemeen $query (is logischer)
-Datdus-dinsdag 6 september 2011 @ 11:25
quote:
6s.gif Op dinsdag 6 september 2011 11:23 schreef Chandler het volgende:
Waarom gebruik je niet de uitleg van php.net?

http://nl.php.net/array
http://nl.php.net/while
http://nl.php.net/foreach

het zou mooier zijn om het zo te doen!
[ code verwijderd ]

http://nl.php.net/for
http://nl.php.net/mysql_num_rows

ps... als je een query opbouwt plaats je die in $sql
als je een query uitvoert noem je die in het algemeen $query (is logischer)
Dankje. :)
GlowMousedinsdag 6 september 2011 @ 11:28
Dat is zeker niet mooier.
Chandlerdinsdag 6 september 2011 @ 11:29
quote:
4s.gif Op dinsdag 6 september 2011 11:28 schreef GlowMouse het volgende:
Dat is zeker niet mooier.
Fijn dat je alles direct zo mooi onderbouwt :P
Sitethiefdinsdag 6 september 2011 @ 11:30
Het kan ook zo : [PHP/(My)SQL] voor dummies #92
GIdinsdag 6 september 2011 @ 11:42
quote:
4s.gif Op dinsdag 6 september 2011 11:28 schreef GlowMouse het volgende:
Dat is zeker niet mooier.
Het kan wel nuttig zijn in situaties, die ook leesbaarheid van code bevorderd. Maar das niet in deze situatie zo iig.
Catbertdinsdag 6 september 2011 @ 14:35
quote:
4s.gif Op dinsdag 6 september 2011 11:28 schreef GlowMouse het volgende:
Dat is zeker niet mooier.
Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.
Pakspuldinsdag 6 september 2011 @ 14:40
quote:
0s.gif Op dinsdag 6 september 2011 14:35 schreef Catbert het volgende:

[..]

Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.
Als je het OO programmeert kun je er bijna niet omheen. Je voert eerst een query uit en deze geeft een datatable op en met deze datatable ga je de output opbouwen. Dan ram je dus eerst alle query informatie in een class (mogelijk de class nog in een collectie) en dan ga je er pas mee werken.
GlowMousedinsdag 6 september 2011 @ 14:43
quote:
0s.gif Op dinsdag 6 september 2011 14:35 schreef Catbert het volgende:

[..]

Wel beter. Het is compleet nutteloos om eerst alles in een array te stoppen in een loop, en daarna in een andere loop dit weer te geven. Verspilling van geheugen.
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.
Catbertdinsdag 6 september 2011 @ 14:46
quote:
0s.gif Op dinsdag 6 september 2011 14:40 schreef Pakspul het volgende:
Als je het OO programmeert kun je er bijna niet omheen. Je voert eerst een query uit en deze geeft een datatable op en met deze datatable ga je de output opbouwen. Dan ram je dus eerst alle query informatie in een class (mogelijk de class nog in een collectie) en dan ga je er pas mee werken.
Dan nog hoef je helemaal niet perse eerst alle classes op te bouwen en ze daarna te gebruiken, dat kun je prima per row doen. Als het kleine sets data zijn is het zeker geen issue, maar bij grote recordsets wel, dan wil je die echt niet eerst allemaal in 't geheugen opbouwen.

quote:
0s.gif Op dinsdag 6 september 2011 14:43 schreef GlowMouse het volgende:
Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.
Wat bedoel je? Stel elke row is een kb aan data, en je hebt 1000 rows. Het maakt nogal uit of je script 1MB aan geheugen moet alloceren of max 1kb. Vergeet niet dat je zo 100 requests tegelijkertijd af te handelen kunt hebben.
Chandlerdinsdag 6 september 2011 @ 14:47
quote:
0s.gif Op dinsdag 6 september 2011 14:43 schreef GlowMouse het volgende:

[..]

Als je je code een beetje overzichtelijk opbouwt dan verspil je inderdaad geheugen.
Daar ben ik het dus niet geheel mee eens! juist door overzichtelijk te scripten (programmeren wil ik het niet noemen...) kun je juist geheugen besparen doordat je sneller je 'foutjes' ziet.

Maar goed, mijn voorbeeld is goed genoeg maar dat vind jij niet... dus vertel eens waarom? kritiek geven ok!? maar dan ook graag uitleg waarom en hoe jij het zou doen!
Catbertdinsdag 6 september 2011 @ 14:49
quote:
0s.gif Op dinsdag 6 september 2011 14:47 schreef Chandler het volgende:
Daar ben ik het dus niet geheel mee eens! juist door overzichtelijk te scripten (programmeren wil ik het niet noemen...) kun je juist geheugen besparen doordat je sneller je 'foutjes' ziet.
Sowieso is het gewoon dom om je zulke verkeerde dingen aan te leren als in een keer alles in een grote array plempen. Dat schaalt voor geen meter.
Pakspuldinsdag 6 september 2011 @ 14:49
quote:
0s.gif Op dinsdag 6 september 2011 14:46 schreef Catbert het volgende:

[..]

Dan nog hoef je helemaal niet perse eerst alle classes op te bouwen en ze daarna te gebruiken, dat kun je prima per row doen. Als het kleine sets data zijn is het zeker geen issue, maar bij grote recordsets wel, dan wil je die echt niet eerst allemaal in 't geheugen opbouwen.
Daarom moet je eerst berg werk investeren om je code zo te krijgen dat je dataset dynamisch kunt krijgen. Zelf hoef ik geen query's meer te schrijven. Alleen even de classes aanmaken en die daar heb ik ook een script voor geschreven die dat doet voor mij, dus dat is gewoon een druk op de knop :P
Tijndinsdag 6 september 2011 @ 14:49
Twee loops is nergens voor nodig, lijkt mij. Maar ik gebruik wel liever foreach-loops dan for-loops, omdat het een simpelere syntax heeft en er daardoor overzichtelijker uitziet.
Chandlerdinsdag 6 september 2011 @ 14:55
quote:
0s.gif Op dinsdag 6 september 2011 14:49 schreef Catbert het volgende:

[..]

Sowieso is het gewoon dom om je zulke verkeerde dingen aan te leren als in een keer alles in een grote array plempen. Dat schaalt voor geen meter.
Dat ben ik met je eens, vandaar mijn voorbeeld *)
GlowMousedinsdag 6 september 2011 @ 14:56
quote:
0s.gif Op dinsdag 6 september 2011 14:46 schreef Catbert het volgende:

[..]

Wat bedoel je? Stel elke row is een kb aan data, en je hebt 1000 rows. Het maakt nogal uit of je script 1MB aan geheugen moet alloceren of max 1kb. Vergeet niet dat je zo 100 requests tegelijkertijd af te handelen kunt hebben.
De tijd dat een server net 100 MB geheugen tekort komt ligt alweer een decennium achter ons. Je redenering klopt ook niet: al voordat mysql_fetch_assoc wordt aangeroepen, zit de hele resultset in het geheugen van de webserver (of in het geheugen van de dbserver bij een unbuffered query).

Veel ontwikkelaars vinden het overzichtelijker om de code en de opmaak van elkaar te scheiden, en met een echo en een mysql_fetch_assoc in dezelfde loop gebeurt dat niet.
mstxdinsdag 6 september 2011 @ 15:03
quote:
14s.gif Op dinsdag 6 september 2011 14:49 schreef Tijn het volgende:
Twee loops is nergens voor nodig, lijkt mij.
quote:
0s.gif Op dinsdag 6 september 2011 14:56 schreef GlowMouse het volgende:
Veel ontwikkelaars vinden het overzichtelijker om de code en de opmaak van elkaar te scheiden, en met een echo en een mysql_fetch_assoc in dezelfde loop gebeurt dat niet.
Dat is voor mij inderdaad de reden om alles in 1 array te stoppen. En dan heb je ook 2 loopjes; 1 om de data op te halen en 1 in de template om het te presenteren.
GlowMousedinsdag 6 september 2011 @ 15:05
Leesvoer: http://gathering.tweakers.net/forum/list_messages/1105254

Nog meer: http://www.ukuug.org/events/linux2002/papers/html/php/#section_2
Catbertdinsdag 6 september 2011 @ 15:13
quote:
0s.gif Op dinsdag 6 september 2011 14:56 schreef GlowMouse het volgende:
De tijd dat een server net 100 MB geheugen tekort komt ligt alweer een decennium achter ons. Je redenering klopt ook niet: al voordat mysql_fetch_assoc wordt aangeroepen, zit de hele resultset in het geheugen van de webserver (of in het geheugen van de dbserver bij een unbuffered query).
Het is gewoon niet waar dat die hele resultset per definitie al in 't geheugen zit. Databaseservers zijn daar veel slimmer in. Als 2 queries dezelfde table benaderen hoeft deze niet 2 keer volledig in 't geheugen te zitten.

quote:
Veel ontwikkelaars vinden het overzichtelijker om de code en de opmaak van elkaar te scheiden, en met een echo en een mysql_fetch_assoc in dezelfde loop gebeurt dat niet.
Zal best, maar als je appserver onderuit gaat omdat je koste wat 't kost je code 'overzichtelijk' moet houden doe je echt iets fout. En met een fatsoenlijke template engine kun je prima je code en layout gescheiden houden zonder eerst volledige query results in 't geheugen te moeten laden.

quote:
Beide zaken zijn met template engines prima te combineren. Jezelf aanleren alles eerst in 't geheugen te laden en er daarna wat mee te gaan doen is gewoon onverstandig.
Tijndinsdag 6 september 2011 @ 15:16
quote:
0s.gif Op dinsdag 6 september 2011 15:13 schreef Catbert het volgende:

Beide zaken zijn met template engines prima te combineren.
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?
Pakspuldinsdag 6 september 2011 @ 15:19
quote:
5s.gif Op dinsdag 6 september 2011 15:16 schreef Tijn het volgende:

[..]

Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?
Weg te schrijven op de HDD en deze haalt de template engine weer op en zal deze echoen? :')
GlowMousedinsdag 6 september 2011 @ 15:24
quote:
0s.gif Op dinsdag 6 september 2011 15:13 schreef Catbert het volgende:

[..]

Het is gewoon niet waar dat die hele resultset per definitie al in 't geheugen zit. Databaseservers zijn daar veel slimmer in. Als 2 queries dezelfde table benaderen hoeft deze niet 2 keer volledig in 't geheugen te zitten.
Als jij twee queries uitvoert op MySQL dan wordt er twee keer geheugen gealloceerd voor de resultset.
Het is wel waar dat wanneer je zelf een array vult, er meer geheugen nodig is om die op te slaan omdat het opslaan minder efficiënt gebeurt.
Catbertdinsdag 6 september 2011 @ 15:33
quote:
5s.gif Op dinsdag 6 september 2011 15:16 schreef Tijn het volgende:
Hoe geef je je data aan je template engine door zonder het in het geheugen te laden dan?
Door de template gewoon iedere keer de row te voeren in plaats van de hele resultset? Zelf doe ik al tijden niks meer met PHP maar in Java met bijvoorbeeld Spring of JSF is het prima mogelijk om data en layout volledig te scheiden maar wel een pagina per row op te bouwen.

Natuurlijk is het voor een hobbyist die z'n eigen CMSje bouwt geen groot issue, maar jezelf aanleren alles eerst in geheugen te laden is m.i. niet de juiste weg.

quote:
0s.gif Op dinsdag 6 september 2011 15:24 schreef GlowMouse het volgende:
Als jij twee queries uitvoert op MySQL dan wordt er twee keer geheugen gealloceerd voor de resultset.
Het is wel waar dat wanneer je zelf een array vult, er meer geheugen nodig is om die op te slaan omdat het opslaan minder efficiënt gebeurt.
Ik weet niet hoe MySQL er mee omgaat maar in MSSQL gaat 'ie met 2 parallelle queries de intersectie van de data maar 1 keer in 't geheugen houden. Je hebt uiteindelijk eigenlijk alleen de rowids van de desbetreffende tables maar nodig, de rest van de data kun je aan de hand daarvan op de cursor doorgeven.
GlowMousedinsdag 6 september 2011 @ 15:36
Ik geloof er helemaal niks van, dan zou MSSQL eerst moeten bepalen of resultsets wel gelijk zijn. Dat is met het oog op MVCC vrij inefficient.
Tijndinsdag 6 september 2011 @ 15:37
quote:
0s.gif Op dinsdag 6 september 2011 15:33 schreef Catbert het volgende:

[..]

Door de template gewoon iedere keer de row te voeren in plaats van de hele resultset?
Maar je template engine moet al die data toch gevoerd krijgen voordat 'ie kan gaan beginnen met weergeven ervan? Wanneer je 'em de tweede row voert, waar slaat 'ie de eerste dan op als dat niet in het geheugen is?
Catbertdinsdag 6 september 2011 @ 15:44
quote:
5s.gif Op dinsdag 6 september 2011 15:37 schreef Tijn het volgende:
Maar je template engine moet al die data toch gevoerd krijgen voordat 'ie kan gaan beginnen met weergeven ervan? Wanneer je 'em de tweede row voert, waar slaat 'ie de eerste dan op als dat niet in het geheugen is?
Hij kan prima een row renderen, net zoals je dat "met de hand" doet.

quote:
0s.gif Op dinsdag 6 september 2011 15:36 schreef GlowMouse het volgende:
Ik geloof er helemaal niks van, dan zou MSSQL eerst moeten bepalen of resultsets wel gelijk zijn. Dat is met het oog op MVCC vrij inefficient.
Als een bepaalde tabel veel benaderd wordt gaat 'ie data cachen. Als beide resultsets de row behorende bij rowid X benaderen wordt die data gewoon via een lookup beschikbaar gemaakt. Als je naar een query explain kijkt zie je dat 'ie vaak joins e.d. eerst afhandelt, en pas daarna de data er bij gaat zoeken. Die data komt dan of van disk, of uit de cache. Zowel MSSQL als Oracle doen dat. Of MySQL dat ook doet weet ik niet, maar daar hoef ik gelukkig niet mee te werken.
GlowMousedinsdag 6 september 2011 @ 15:54
Raar verhaal, bij een query met een aggregated functie heb je het niet meer over rows in een tabel tenzij je de resultset als tabel beschouwt en dan de overhead wilt van het testen op gelijkheid. En heb je dan elke keer een roundtrip als je een rij ophaalt?
Catbertdinsdag 6 september 2011 @ 17:27
quote:
0s.gif Op dinsdag 6 september 2011 15:54 schreef GlowMouse het volgende:
Raar verhaal, bij een query met een aggregated functie heb je het niet meer over rows in een tabel tenzij je de resultset als tabel beschouwt en dan de overhead wilt van het testen op gelijkheid. En heb je dan elke keer een roundtrip als je een rij ophaalt?
Da's een ander verhaal. Ik zei in het begin al dat dit een issue is bij grote resultsets. Nu hebben we het bovendien over randzaken. Punt is dat het m.i. verkeerd is jezelf aan te leren iedere keer eerst alles in geheugen te lezen omdat het in veel gevallen relatief inefficient is. Dat je het doet op plekken waar het niet inefficient is, of soms juist efficienter; prima. Het gaat mij puur om wat een beginner zichzelf aanleert. Of in ieder geval dat die beginner weet waar hij mee bezig is.
-Datdus-donderdag 8 september 2011 @ 12:13
Kan iemand me helpen met deze formule:

1
2
3
4
5
6
cijfer | weging | totaal 
6,5        1          6,5
7,0        3          21
totaal:    4         27,5

totaal / weging = uiteindelijk cijfer

De weging wordt bij elkaar opgeteld en maakt 4.
6,5 keer 1 is 6,5 en 7 keer 3 is 21 en wordt bij elkaar 27,5
nu moet het totaal gedeeld worden door de weging en dan komt het uiteindelijke cijfer eruit. Ik hoop dat jullie met nog snappen.

Ik heb met een mysql query dit gedaan maar geeft niet het goeie antwoord.

1
2
3
4
$query = mysql_query("SELECT     
    SUM(weging) as wtotal, 
    SUM(cijfer * weging) as itotaal,
    SUM(weging / itotaal) as totaal FROM cijfers");

AAH IK WORD GEK!
Tegandonderdag 8 september 2011 @ 12:16
Je moet ook wtotal gebruiken en niet weging.
GlowMousedonderdag 8 september 2011 @ 12:16
quote:
14s.gif Op donderdag 8 september 2011 12:16 schreef Tegan het volgende:
Je moet ook wtotal gebruiken en niet weging.
En de laatste SUM weglaten.
Tegandonderdag 8 september 2011 @ 12:18
Ja dat dus. Dacht even dat je nog SUM(itotaal) moest hebben, maar dat is niet :).
-Datdus-donderdag 8 september 2011 @ 12:30
Even proberen. :)
MrNilesdonderdag 8 september 2011 @ 13:04
probeer een file te unzippen maar werkt niet...krijg ook geen foutmelding wat er fout zou kunnen gaan. Path is goed, daar geeft ie wel een foutmelding op als de niet komt

1
2
3
4
5
6
7
<?php
require_once("pclzip.lib.php");
$zip = new PclZip("uploads/".$filename);

if(
$zip->extract() == 0)
  die(
"Error : " $zip->errorInfo(true));
?>
GlowMousedonderdag 8 september 2011 @ 13:05
'werkt niet' :')
Pakspuldonderdag 8 september 2011 @ 13:07
quote:
0s.gif Op donderdag 8 september 2011 13:04 schreef MrNiles het volgende:
probeer een file te unzippen maar werkt niet...krijg ook geen foutmelding wat er fout zou kunnen gaan. Path is goed, daar geeft ie wel een foutmelding op als de niet komt
[ code verwijderd ]

Hoever ben je zelf al gekomen met debuggen? Error_reporting(E_ALL); al keertje aangepleurd?
MrNilesdonderdag 8 september 2011 @ 13:25
volgende n00b vraag dan

wat is de max size van een te uploaden zip
30files in zip, totaal 2,01MB = geen probleem
40files in zip, totaal 2,45MB = Missing archive file 'uploads/40f245.zip'

het bestand wordt niet geupload
ligt dat aan de grootte van het bestand?

[ Bericht 71% gewijzigd door MrNiles op 08-09-2011 14:52:17 ]
KomtTijd...donderdag 8 september 2011 @ 15:04
quote:
0s.gif Op donderdag 8 september 2011 13:25 schreef MrNiles het volgende:
volgende n00b vraag dan

wat is de max size van een te uploaden zip
Even mijn glazen bol zoeken om te zien hoe jij je server hebt ingesteld, BRB!
Tegandonderdag 8 september 2011 @ 15:09
quote:
7s.gif Op donderdag 8 september 2011 12:30 schreef -Datdus- het volgende:
Even proberen. :)
itotaal/wtotaal dus.
remi1986donderdag 8 september 2011 @ 15:13
quote:
0s.gif Op donderdag 8 september 2011 13:25 schreef MrNiles het volgende:
volgende n00b vraag dan

wat is de max size van een te uploaden zip
30files in zip, totaal 2,01MB = geen probleem
40files in zip, totaal 2,45MB = Missing archive file 'uploads/40f245.zip'

het bestand wordt niet geupload
ligt dat aan de grootte van het bestand?
phpinfo();

iets van max_upload_size .. of file_upload .. weet zo uit mijn hoofd niet meer welke het is.
MrNilesdonderdag 8 september 2011 @ 15:24
quote:
14s.gif Op donderdag 8 september 2011 15:04 schreef KomtTijd... het volgende:

[..]

Even mijn glazen bol zoeken om te zien hoe jij je server hebt ingesteld, BRB!
fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden is

thanx remi

het is dus
upload_max_filesize 10M

blijft mijn vraag staan..waarom de zipfile niet kan worden geupload
remi1986donderdag 8 september 2011 @ 15:31
quote:
0s.gif Op donderdag 8 september 2011 15:24 schreef MrNiles het volgende:

[..]

fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden is

thanx remi

het is dus
upload_max_filesize 10M

blijft mijn vraag staan..waarom de zipfile niet kan worden geupload
Als je na de POST een print_r van $_FILES doet, staat het bestand er dan wel?

Zo ja:
Pak je het bestand direct vanuit de tmp map uit? Of verplaats je het bestand eerst naar een "vaste" locatie op de server? (move_uploaded_file)

Ik zou dat laatste doen, en dan het bestand uitpakken.
MrNilesdonderdag 8 september 2011 @ 15:35
quote:
0s.gif Op donderdag 8 september 2011 15:31 schreef remi1986 het volgende:

[..]

Als je na de POST een print_r van $_FILES doet, staat het bestand er dan wel?

Zo ja:
Pak je het bestand direct vanuit de tmp map uit? Of verplaats je het bestand eerst naar een "vaste" locatie op de server? (move_uploaded_file)

Ik zou dat laatste doen, en dan het bestand uitpakken.
idd dat laatste

ik ga ff proberen

het lijkt "spontaan" te zijn opgelost :)
kan het zijn dat een slechte verbinding oorzaak kan hebben, heb al heel de dag last van slechte verbinding met FOK!, opnieuw inloggen etc
naja...vreemd..maar het werkt na alleen koffie drinken
misschien meer koffie ga drinken
Intrepiditydonderdag 8 september 2011 @ 20:51
quote:
0s.gif Op donderdag 8 september 2011 15:24 schreef MrNiles het volgende:

[..]

fijn als je dat weet maar je kan me toch ook zeggen dat dat in phpinfo te vinden is

thanx remi

het is dus
upload_max_filesize 10M

blijft mijn vraag staan..waarom de zipfile niet kan worden geupload
Ondanks dat het al opgelost is een opmerking, een verkeerd ingestelde max_post_size wil ook wel eens voor problemen zorgen. Als die bijvoorbeeld op 2M staat kun je je max filesize wel op een terabyte zetten, als je het niet naar je server toe mag posten houdt het op.
Kort gezegd beïnvloedt upload_max_filesize de maximale grootte per bestand, en max_post_size de maximale grootte van de hele post.
Chandlervrijdag 9 september 2011 @ 09:26
Ik heb het zelfde gezeur met een website van een klant, uploaden gaat goed (move_uploaded_file geeft geen error en zegt dat het bestand is 'gemoved') maar als ik dan op de volgende pagina kom en in de directory kijk waar het bestand zou moeten staan staat er niets!!!!

Hoster heeft wel meer vage problemen dus gaan we eerst een verhuizen en het dan nog eens proberen! (toch geen pcextreme hé :P)
Wouter2006vrijdag 9 september 2011 @ 11:04
quote:
5s.gif Op vrijdag 9 september 2011 09:26 schreef Chandler het volgende:
Ik heb het zelfde gezeur met een website van een klant, uploaden gaat goed (move_uploaded_file geeft geen error en zegt dat het bestand is 'gemoved') maar als ik dan op de volgende pagina kom en in de directory kijk waar het bestand zou moeten staan staat er niets!!!!

Hoster heeft wel meer vage problemen dus gaan we eerst een verhuizen en het dan nog eens proberen! (toch geen pcextreme hé :P)
lijkt mij dan een rechtenprobleem?
Flepkevrijdag 9 september 2011 @ 13:31
Inderdaad, mapje even 777 chmodden, testen ofdat het dan wel werkt, zoja dan de rechten goed instellen.
MrNilesvrijdag 9 september 2011 @ 20:21
bij deze
1
2
3
<?php
echo '<img src=".$album."/thumbs/klein_".$files[$rand]. "title=".$afbeelding['basename'] ."alt=".$afbeelding['basename']. "class='thumbs' "> ';
?>

krijg ik

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'

ik zie m niet..iemand anders wel?
Teganvrijdag 9 september 2011 @ 20:24
Lekker inconsequent gebruik van ' en ". Loop die allemaal maar eens na.
Lightvrijdag 9 september 2011 @ 20:28
quote:
0s.gif Op vrijdag 9 september 2011 20:21 schreef MrNiles het volgende:
bij deze
[ code verwijderd ]

krijg ik

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'

ik zie m niet..iemand anders wel?
1
2
3
4
5
6
7
8
9
10
<?php

printf
('<img src="%s" title="%s" alt="%s" class="%s">', array(
      
$album.'/thumbs/klein_'.$files[$rand]
    , 
$afbeelding['basename']
    , 
$afbeelding['basename']
    , 
'thumbs'
));

?>
MrNilesvrijdag 9 september 2011 @ 20:29
quote:
0s.gif Op vrijdag 9 september 2011 20:24 schreef Tegan het volgende:
Lekker inconsequent gebruik van ' en ". Loop die allemaal maar eens na.
dat heb ik dus gedaan..maar ik ben ff de draad kwijt :(
KomtTijd...vrijdag 9 september 2011 @ 20:29
quote:
0s.gif Op vrijdag 9 september 2011 20:21 schreef MrNiles het volgende:
bij deze
[ code verwijderd ]

krijg ik

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'

ik zie m niet..iemand anders wel?
Hou eens op met developen in notepad.exe.
Zelfs de syntaxhighlighter van FOK! pikt 'm er feilloos uit.
Lightvrijdag 9 september 2011 @ 20:31
quote:
0s.gif Op vrijdag 9 september 2011 20:29 schreef MrNiles het volgende:

[..]

dat heb ik dus gedaan..maar ik ben ff de draad kwijt :(
In HTML tags altijd "" gebruiken, en strings met daarin HTML tags moeten dus tussen '' staan.
MrNilesvrijdag 9 september 2011 @ 20:32
quote:
13s.gif Op vrijdag 9 september 2011 20:29 schreef KomtTijd... het volgende:

[..]

Hou eens op met developen in notepad.exe.
Zelfs de syntaxhighlighter van FOK! pikt 'm er feilloos uit.
sorry :@
ik zal eens iets opzoeken..roep eens iets
Teganvrijdag 9 september 2011 @ 20:33
Notepad++.
KomtTijd...vrijdag 9 september 2011 @ 20:33
SRSLY?

Ik dacht ik maak een grapje 8)7

Probeer geany of notepad++. Voor PHP vind ik geany relaxter.
MrNilesvrijdag 9 september 2011 @ 20:37
quote:
11s.gif Op vrijdag 9 september 2011 20:33 schreef KomtTijd... het volgende:
SRSLY?

Ik dacht ik maak een grapje 8)7

Probeer geany of notepad++. Voor PHP vind ik geany relaxter.
ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluiten
Teganvrijdag 9 september 2011 @ 20:39
quote:
0s.gif Op vrijdag 9 september 2011 20:37 schreef MrNiles het volgende:

[..]

ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluiten
Je kunt ook offline programmeren. Sterker nog, dat zou je moeten doen. En pas online gooien als je jezelf hebt overtuigd dat het wel gaat werken.
KomtTijd...vrijdag 9 september 2011 @ 20:44
quote:
0s.gif Op vrijdag 9 september 2011 20:37 schreef MrNiles het volgende:

[..]

ik zit in plesk te klooien omdat ik ook in een vrij uurtje op het werk iets kan doen..daar mag ik niets installeren op de pc en geen eigen laptop op het netwerk kan aansluiten
NP++ laat zich heel makkelijk portable installeren. Geany is volgens mij ook een portable variant van.

en anders: http://www.cdolivet.com/editarea/
MrNilesvrijdag 9 september 2011 @ 20:58
quote:
14s.gif Op vrijdag 9 september 2011 20:44 schreef KomtTijd... het volgende:

[..]

NP++ laat zich heel makkelijk portable installeren. Geany is volgens mij ook een portable variant van.

en anders: http://www.cdolivet.com/editarea/
thanx voor de tips
ga ik zeker iets mee doen
GlowMousezaterdag 10 september 2011 @ 00:15
quote:
13s.gif Op vrijdag 9 september 2011 20:29 schreef KomtTijd... het volgende:

[..]

Zelfs de syntaxhighlighter van FOK! pikt 'm er feilloos uit.
http://nl3.php.net/manual/en/function.highlight-string.php
boem-dikkiezaterdag 10 september 2011 @ 02:10
quote:
0s.gif Op vrijdag 9 september 2011 20:29 schreef MrNiles het volgende:

[..]

dat heb ik dus gedaan..maar ik ben ff de draad kwijt :(
Voor het geval je er nog niet uit bent.

".$album."/thumbs/klein_".$files[$rand]. "

Kijk daar nog eens goed naar.

Je sluit je stukje php met " waardoor /thumbs/klein_ nergens meer tussen staat.

Dit moet wel werken denk ik.

1
2
3
<?php
echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> ';
?>
MrNileszondag 11 september 2011 @ 20:58
quote:
14s.gif Op zaterdag 10 september 2011 02:10 schreef boem-dikkie het volgende:

[..]

Voor het geval je er nog niet uit bent.

".$album."/thumbs/klein_".$files[$rand]. "

Kijk daar nog eens goed naar.

Je sluit je stukje php met " waardoor /thumbs/klein_ nergens meer tussen staat.

Dit moet wel werken denk ik.
[ code verwijderd ]

het is min of meer gelukt
alle foutmeldingen zijn verdwenen maar het script doet niet wat ik had gehoopt :(
http://www.phphulp.nl/php(...)h-fotoalbum-v3/1491/ is een fotoalbum die vanuit mapjes zelf "sub"albums aanmaakt
werkt prima
maar
op de voorbeeld pagina is het de overzichtspagina met linkjes EN plaatjes. In het script van phphulp heb ik alleen linkjes
Ik had gehoopt met een aangepast script wat erbij stond dit te kunnen maken..maar helaas..
ook gaat mijn php kennis lang niet vergenoeg om zoiets zelf te maken
Teganzondag 11 september 2011 @ 21:03
Wij kunnen het wel weer voorkauwen maar wellicht kun je het hele project beter uitbesteden.
MrNileszondag 11 september 2011 @ 21:14
quote:
1s.gif Op zondag 11 september 2011 21:03 schreef Tegan het volgende:
Wij kunnen het wel weer voorkauwen maar wellicht kun je het hele project beter uitbesteden.
ik vraag er toch ook niet om, leg alleen even uit waar ik mee bezig ben
als het me verder niet meer lukt..so be it..dan maar alleen linkjes
tis maar voor de hobby..gelukkig hoef ik er niet rijk van te worden :)
KomtTijd...zondag 11 september 2011 @ 21:16
Heb je wellicht GD niet geinstalleerd staan? [/wilde suggestie]

En waarom maak je niet gewoon lekker een picasa-album ofzo?
boem-dikkiezondag 11 september 2011 @ 21:16
quote:
0s.gif Op zondag 11 september 2011 20:58 schreef MrNiles het volgende:

[..]

het is min of meer gelukt
alle foutmeldingen zijn verdwenen maar het script doet niet wat ik had gehoopt :(
http://www.phphulp.nl/php(...)h-fotoalbum-v3/1491/ is een fotoalbum die vanuit mapjes zelf "sub"albums aanmaakt
werkt prima
maar
op de voorbeeld pagina is het de overzichtspagina met linkjes EN plaatjes. In het script van phphulp heb ik alleen linkjes
Ik had gehoopt met een aangepast script wat erbij stond dit te kunnen maken..maar helaas..
ook gaat mijn php kennis lang niet vergenoeg om zoiets zelf te maken
Wat voor aangepast script wat erbij stond?
MrNileszondag 11 september 2011 @ 21:23
quote:
0s.gif Op zondag 11 september 2011 21:16 schreef KomtTijd... het volgende:
Heb je wellicht GD niet geinstalleerd staan? [/wilde suggestie]

En waarom maak je niet gewoon lekker een picasa-album ofzo?
Wat is GD? (edit: GD support = enabled)

Ik ben zelf een beetje aan het pielen met php als hobby
daarom eigenlijk geen picasa,
Heb nu zo gemaakt dat er een zipje wordt geupload naar de site
deze wordt uitgepakt in de juiste dir en zo een fotoboek ontstaat
Het is gewoon om te spelen eigenlijk, beetje bezig in m'n vrije tijd

@boem-dikkie: verder omlaag in de comments staat er een aangepast script,
ik wist niet precies wat het ging doen, de omschrijving was niet heel goed erbij
als ik het nu terug lees is het denk ik een oplossing voor een ander probleem
maar dit was de extra code erin
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
// Nieuw Nieuw Nieuw Nieuw //
      
$exts 'jpg jpeg png gif';
      
$files = array();
      
$i = - 1;
      if (
'' == $album)
        
$album './';
      
$handle opendir($album);
      
$exts explode(' '$exts);
      while (
false !== ($file readdir($handle))) {
        foreach (
$exts as $ext) {
          if (
preg_match('/\.' $ext '$/i'$file$test)) {
            
$files[] = $file;
            ++
$i;
          }
        }
      }
      
closedir($handle);
      
mt_srand((double) microtime() * 1000000);
      
$rand mt_rand(0$i);
// Eind Eind Eind Eind Eind //

      
echo '<img src="'.$album.'/thumbs/klein_'.$files[$rand]. '"title="'.$afbeelding['basename'] .'" alt="'.$afbeelding['basename']. '" class="thumbs"> ';
      echo 
'<a href='?pagina=fotoalbum&album=' . $album . ''>' ucfirst(basename($album)) . '</a><br><br />' PHP_EOL;
?>


[ Bericht 2% gewijzigd door MrNiles op 12-09-2011 10:23:34 ]
wdndonderdag 15 september 2011 @ 10:32
MySQL...

Ik heb een display van `relaties` en daarnaast een tabel van enkele miljoenen (10+) records waarbij op basis van een veld `relatie` en `jaartal` moet gaan controleren wat de `omzet` (sum) is over 3 jaren.
Dus... relatie, naam. omzet 2011, omzet 2010, omzet 2009.

Maar zelfs met `indexering` op de tabel is het veel en veels te langzaam (30+ secondes) om alles bij elkaar te rapen.

Nu ben ik een beetje aan het rondkijken en kwam ik `stored procedures` tegen. Is dit wat ik nodig heb om hiermee bijvoorbeeld een schaduwtabel te maken die real time ge-update wordt als de hoofdtabel opgebouwd wordt?

Of is er een betere oplossing? Ik weiger om in de tabel `relaties` een veld op te nemen met de omzetgegevens voor die jaren ;-)
GlowMousedonderdag 15 september 2011 @ 10:38
Onduidelijk verhaal. Wat is de output van SHOW CREATE TABLE, en wat is je query?
Catbertdonderdag 15 september 2011 @ 12:04
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.
GlowMousedonderdag 15 september 2011 @ 12:14
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 iedere rij uit zo'n overzicht iedere keer die hele tabel door moeten ploegen.
Catbertdonderdag 15 september 2011 @ 12:18
Nee, want hij heeft vermoedelijk wel een index op relatie id. Tenminste, dat hoop ik, anders is het wel heel erg dom.
GlowMousedonderdag 15 september 2011 @ 12:28
Zelfs met zo'n index is het goed mogelijk dat hij voor elke relatie in zijn overzicht de hele tabel doorloopt. Doorlopen moet je dan zien elke datapage raadplegen (als is het maar voor een record per page).
Tijndonderdag 15 september 2011 @ 12:30
quote:
0s.gif Op donderdag 15 september 2011 10:32 schreef wdn het volgende:

Maar zelfs met `indexering` op de tabel is het veel en veels te langzaam (30+ secondes) om alles bij elkaar te rapen.
Dan heb je niet de juiste indices geplaatst.
GlowMousedonderdag 15 september 2011 @ 12:43
quote:
3s.gif Op donderdag 15 september 2011 12:30 schreef Tijn het volgende:

[..]

Dan heb je niet de juiste indices geplaatst.
Wat een snelle conclusie, een kenner?
Tijndonderdag 15 september 2011 @ 13:27
quote:
7s.gif Op donderdag 15 september 2011 12:43 schreef GlowMouse het volgende:

[..]

Wat een snelle conclusie, een kenner?
Als er verder geen informatie wordt gegeven, kun je verder niet zoveel zeggen dan "je hebt het verkeerd gedaan" :P
Intrepiditydonderdag 15 september 2011 @ 14:02
Probeer eens een 'explain' voor je query te gooien om te kijken waar prestatiewinst te behalen valt.
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Pakspuldonderdag 15 september 2011 @ 14:37
quote:
0s.gif Op donderdag 15 september 2011 14:02 schreef Intrepidity het volgende:
Probeer eens een 'explain' voor je query te gooien om te kijken waar prestatiewinst te behalen valt.
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Ik heb net query gemaakt en gekeken met explain wat hij toevoegt, maar ik zie wat hij doet, maar niet waar hoeveel tijd inging zitten en hoeveel percentage de belasting van een onderdeel was. Zou wel tof zijn als hij zegt dat een bepaalde join 60% van de belasting vraagt en dat je daar kunt beginnen voor verbetering.
Catbertdonderdag 15 september 2011 @ 14:45
Je weet niks als hij niet post welke indices hij heeft.

De MSSQL query explain geeft overigens gewoon aan hoe zwaar een bepaald deel is.
Pakspuldonderdag 15 september 2011 @ 15:15
quote:
0s.gif Op donderdag 15 september 2011 14:45 schreef Catbert het volgende:
Je weet niks als hij niet post welke indices hij heeft.

De MSSQL query explain geeft overigens gewoon aan hoe zwaar een bepaald deel is.
MySQL geeft echt weinig informatie ;(
GlowMousedonderdag 15 september 2011 @ 15:17
Je kunt het gewoon niet lezen.
Pakspuldonderdag 15 september 2011 @ 15:18
quote:
0s.gif Op donderdag 15 september 2011 15:17 schreef GlowMouse het volgende:
Je kunt het gewoon niet lezen.
Geef dan eens een mooi voorbeeld.
GlowMousedonderdag 15 september 2011 @ 15:31
Nee, want het kost gewoon tijd voor je het kunt.
Cue_vrijdag 16 september 2011 @ 15:47
Oke ik zit met het volgende, vanuit een pakket wordt de volgende code gegenereerd die ik in mijn database moet gooien:

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
/* Drop stored procedure task_generate_sales_invoice first. */

if exists (select 1 from sysobjects
           where name = 'task_generate_sales_invoice' and type = 'P')
   drop procedure task_generate_sales_invoice
go

create procedure task_generate_sales_invoice
(

   @until_date    date   ,
   @customer_id   id     
)
as
begin

  -- Do not count affected rows for performance
  SET NOCOUNT ON

   -- Generate sales invoice
   
   insert into sales_invoice
   select isnull((select max(sales_invoice_no) + 1
                  from sales_invoice), 1),
          customer_id,
          getdate(),
          dateadd(day, 30, getdate()),
          0,
          0,
          0
   from customer c
   where c.customer_id = @customer_id
     and exists (select 1
                 from hour h
                 join project p on (p.project_id = h.project_id)
                 where h.sales_invoice_id is null
                   and p.customer_id = c.customer_id)
   
   -- Connect hours to sales invoice.
   
   update h
   set sales_invoice_id = (select max(sales_invoice_id)
                           from sales_invoice i
                           where i.customer_id = p.customer_id)
   from hour h
   join project p on (p.project_id = h.project_id)
   where h.sales_invoice_id is null
     and p.customer_id = @customer_id
     and h.date       <= @until_date
   
end
go

Nu krijg ik de volgende foutmelding:
1
2
Msg 213, Level 16, State 1, Procedure task_generate_sales_invoice, Line 16
Insert Error: Column name or number of supplied values does not match table definition.
ViPeRIIvrijdag 16 september 2011 @ 16:05
Een van je tabelnamen die geselecteerd worden, bestaat niet
Catbertvrijdag 16 september 2011 @ 16:12
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.
Cue_vrijdag 16 september 2011 @ 16:16
de kolommen/tabellen komen overeen met het datamodel
wdnvrijdag 16 september 2011 @ 17:13
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).
Intrepidityvrijdag 16 september 2011 @ 17:15
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.
dirkjozondag 18 september 2011 @ 14:39
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?
Chandlerzondag 18 september 2011 @ 17:34
Kun je hier wat mee? :D

http://www.pfz.nl/scripts/147-class-paginanavigatie/
Tijnzondag 18 september 2011 @ 18:53
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?
dirkjozondag 18 september 2011 @ 19:05
Ik ga eens even kijken naar een if statement :)
GlowMousezondag 18 september 2011 @ 19:29
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.
dirkjozondag 18 september 2011 @ 20:17
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>";
            }
        }
Pakspulzondag 18 september 2011 @ 21:14
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;
}
?>


:)
ralfiezondag 18 september 2011 @ 22:30
isset($decoration['breaker']) === true

isset poept toch alleen maar true of false? waarom die === true ?
Tijnzondag 18 september 2011 @ 23:58
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 :)
Pakspulmaandag 19 september 2011 @ 07:47
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.
mstxmaandag 19 september 2011 @ 08:17
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.
Pakspulmaandag 19 september 2011 @ 08:18
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
wobbeldinsdag 20 september 2011 @ 11:14
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
mstxdinsdag 20 september 2011 @ 11:16
SELECT producten.naam, SUM(*) FROM verkocht LEFT JOIN producten ON verkocht.pro_id=producten.pro_id GROUP BY verkocht.pro_id

zoiets?
GlowMousedinsdag 20 september 2011 @ 11:19
SELECT producten.naam, COUNT(*)
FROM verkocht
LEFT JOIN producten ON verkocht.pro_id=producten.pro_id
GROUP BY producten.pro_id
wobbeldinsdag 20 september 2011 @ 11:22
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
)
Intrepiditydinsdag 20 september 2011 @ 11:22
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 ;)
mstxdinsdag 20 september 2011 @ 11:22
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
GlowMousedinsdag 20 september 2011 @ 11:34
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)
GlowMousedinsdag 20 september 2011 @ 11:35
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.
Intrepiditydinsdag 20 september 2011 @ 11:36
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 :)
wobbeldinsdag 20 september 2011 @ 11:43
Ik heb verkocht en producten al omgewisseld bij de LEFT JOIN, maar hoe krijg ik ook de producten waarvan er 0 zijn verkocht? :P Als ik ze omwissel staat overal 1 achter :'(
Intrepiditydinsdag 20 september 2011 @ 11:44
Overigens is het ook een stuk sneller om de relatie om te draaien. selecten uit producten en verkocht hieraan joinen. Dit omdat er een stuk meer records in verkocht dan in producten zitten.
GlowMousedinsdag 20 september 2011 @ 11:56
quote:
0s.gif Op dinsdag 20 september 2011 11:36 schreef Intrepidity het volgende:

[..]

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 :)
Ik heb hier aardig wat mee getest en dit heb ik nog nooit gezien. Heb je een dataset, een query, en een MySQL-versienummer waarbij dit optreedt?
Thomassdinsdag 20 september 2011 @ 11:57
GlowMouse, hoe ben jij ooit zon MySQL-baas geworden als ik mag vragen? Ik kan zelf nog steeds niet altijd voorspellen wat het query plan wordt van bepaalde queries, is dat een kwestie van de source erop naslaan of heb je misschien een handige referentie voor me? De manual behandelt dit niet echt in-depth volgens mij :)

Concrete vraag; ik heb zoiets:

1
2
3
4
5
6
7
8
CREATE TABLE `comments` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `content_id` timestamp NULL DEFAULT NULL, -- timestamp ja :D
  *snip* hoop blabla *snip*
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `by_content_id` (`content_id`,`created_at`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Ik wil een ordening van alle items waarnaar content_id refereert op basis van MAX(created_at), stel ik heb dus 1 bepaald content_id, hoe bepaal ik dan de "offset", d.w.z. hoeveel content_id's zijn er met lagere MAX(created_at)?

Zelf heb ik dit
1
2
3
4
5
6
7
8
9
10
11
SELECT COUNT(*)
FROM (
       SELECT 1
       FROM comments
       GROUP BY content_id
       HAVING MAX(created_at) > (
               SELECT MAX(created_at)
               FROM comments
               WHERE content_id = FROM_UNIXTIME(1316465786)
       )
) AS predecessors

Werkt prima maar ik vind het, a: spuuglelijk, b: ik heb een vermoeden dat het beter/korter/mooier moet kunnen.

EDIT: Ik vind het ook vervelend dat ik FROM_UNIXTIME / UNIX_TIMESTAMP telkens moet gebruiken, ik werk met UTC timestamps dus de conversie van/naar is onnodig en vervelend. Is er een instelling voor de default weergave als UTC stamp? (ik heb hem niet kunnen vinden)
Intrepiditydinsdag 20 september 2011 @ 11:57
quote:
0s.gif Op dinsdag 20 september 2011 11:56 schreef GlowMouse het volgende:

[..]

Ik heb hier aardig wat mee getest en dit heb ik nog nooit gezien. Heb je een dataset, een query, en een MySQL-versienummer waarbij dit optreedt?
Ik heb nu geen tijd (@ werk), maar zal vanavond eens wat gaan testen :)
Kan idd ook wezen dat het al lang weer uit MySQL is. Het is een behoorlijke legacy-werkwijze van mij :P Stamt nog uit het 4.x tijdperk afaik.
GlowMousedinsdag 20 september 2011 @ 12:04
quote:
3s.gif Op dinsdag 20 september 2011 11:57 schreef Thomass het volgende:
GlowMouse, hoe ben jij ooit zon MySQL-baas geworden als ik mag vragen?
:o
http://shop.oreilly.com/product/9780596101718.do en http://www.mysqlperformanceblog.com/ helemaal lezen, en veel uitproberen. De meeste kennis heb ik in een maandje of 2-3 wel verworven.
Intrepiditydinsdag 20 september 2011 @ 12:05
En het is ook een kwestie van veel EXPLAIN gebruiken en kijken waar je kunt optimaliseren. Nadat je dat 10 keer hebt uitgevonden doe je het volautomatisch :P
GlowMousedinsdag 20 september 2011 @ 12:09
zo?
1
2
3
4
5
6
7
SELECT COUNT(DISTINCT content_id)
FROM comments
WHERE created_at > (
        SELECT MAX(created_at)
        FROM comments
        WHERE content_id = FROM_UNIXTIME(1316465786)
)
GlowMousedinsdag 20 september 2011 @ 12:14
Volgens mij bedoel je op regel 6 een < ipv een >. Voor een < kun je zoiets doen:
1
2
3
4
SELECT COUNT(DISTINCT c1.content_id)
FROM comments c1
LEFT JOIN c2 ON(c1.content_id=c2.content_id AND c2.created_at>[subquery eerst uitvoeren en het resultaat hier zetten])
WHERE c2.content_id IS NULL
GlowMousedinsdag 20 september 2011 @ 12:17
quote:
0s.gif Op dinsdag 20 september 2011 12:04 schreef GlowMouse het volgende:

[..]

:o
http://shop.oreilly.com/product/9780596101718.do en http://www.mysqlperformanceblog.com/ helemaal lezen, en veel uitproberen. De meeste kennis heb ik in een maandje of 2-3 wel verworven.
Deel 3 komt eraan: http://www.xaprb.com/blog(...)mysql-third-edition/
Sitethiefdinsdag 20 september 2011 @ 12:51
Is EXPLAIN ook goed in te zetten als je een PDO class hebt opgebouwd waarmee je al je queries afhandelt?
Intrepiditydinsdag 20 september 2011 @ 13:00
quote:
0s.gif Op dinsdag 20 september 2011 12:51 schreef Sitethief het volgende:
Is EXPLAIN ook goed in te zetten als je een PDO class hebt opgebouwd waarmee je al je queries afhandelt?
Binnen je applicatie heb je er niet zo veel aan afaik. Je gebruikt het direct op MySQL om je queries te optimaliseren voordat je ze in je applicatie gaat gebruiken.
Thomassdinsdag 20 september 2011 @ 13:10
quote:
0s.gif Op dinsdag 20 september 2011 12:14 schreef GlowMouse het volgende:
Volgens mij bedoel je op regel 6 een < ipv een >. Voor een < kun je zoiets doen:
[ code verwijderd ]

Het is verwarrend ja maar ik bedoelde wel een groter dan. Item met meest recent comment heeft 0 predecessors, t item met het op-ena-meest recente comment heeft 1 predecessor enz.

Bedankt i.i.g. voor je bijdrage, maar ik heb wel de indruk dat het meer werk doet dan mijn oplossing. Kan dat kloppen?

Als ik zo een tabelletje bouw en er wat data in prop:
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
mysql> show create table comments2\G
*************************** 1. row ***************************
       Table: comments2
Create Table: CREATE TABLE `comments2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `content_id` int(10) unsigned DEFAULT NULL,
  `created_at` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `by_content_id` (`content_id`,`created_at`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> select count(*) from comments2;
+----------+
| count(*) |
+----------+
|  2359296 |
+----------+
1 row in set (0.02 sec)

mysql> select content_id, max(created_at) from comments2 group by content_id order by max(created_at) asc;
+------------+-----------------+
| content_id | max(created_at) |
+------------+-----------------+
|          1 |               3 |
|          2 |               6 |
*snip*
|    2654208 |         5308416 |
|    3981312 |         7962624 |
+------------+-----------------+
95 rows in set (0.04 sec)

Dan krijg ik bij jouw resp. mijn query dit (subquery apart doen en invullen maakt geen verschil)
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
mysql> SELECT COUNT(DISTINCT content_id)
    -> FROM comments2
    -> WHERE created_at > (
    ->         SELECT MAX(created_at)
    ->         FROM comments2
    ->         WHERE content_id = 2654208
    -> );
+----------------------------+
| COUNT(DISTINCT content_id) |
+----------------------------+
|                          1 |
+----------------------------+
1 row in set (1.58 sec)

mysql> SELECT COUNT(*)
    -> FROM (
    ->   SELECT 1
    ->   FROM comments2
    ->   GROUP BY content_id
    ->   HAVING MAX(created_at) > (
    ->     SELECT MAX(created_at)
    ->     FROM comments2
    ->     WHERE content_id = 2654208
    ->   )
    -> ) AS predecessors;
+----------+
| COUNT(*) |
+----------+
|        1 |
+----------+
1 row in set (0.01 sec)

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
mysql> explain SELECT COUNT(*)
    -> FROM (
    ->   SELECT 1
    ->   FROM comments2
    ->   GROUP BY content_id
    ->   HAVING MAX(created_at) > (
    ->     SELECT MAX(created_at)
    ->     FROM comments2
    ->     WHERE content_id = 2654208
    ->   )
    -> ) AS predecessors;
+----+-------------+-----------+-------+---------------+---------------+---------+------+------+------------------------------+
| id | select_type | table     | type  | possible_keys | key           | key_len | ref  | rows | Extra                        |
+----+-------------+-----------+-------+---------------+---------------+---------+------+------+------------------------------+
|  1 | PRIMARY     | NULL      | NULL  | NULL          | NULL          | NULL    | NULL | NULL | Select tables optimized away |
|  2 | DERIVED     | comments2 | range | NULL          | by_content_id | 5       | NULL |   95 | Using index for group-by     |
|  3 | SUBQUERY    | NULL      | NULL  | NULL          | NULL          | NULL    | NULL | NULL | Select tables optimized away |
+----+-------------+-----------+-------+---------------+---------------+---------+------+------+------------------------------+
3 rows in set (0.01 sec)

mysql> explain SELECT COUNT(DISTINCT content_id)
    -> FROM comments2
    -> WHERE created_at > (
    ->         SELECT MAX(created_at)
    ->         FROM comments2
    ->         WHERE content_id = 2654208
    -> );
+----+-------------+-----------+-------+---------------+---------------+---------+------+---------+------------------------------+
| id | select_type | table     | type  | possible_keys | key           | key_len | ref  | rows    | Extra                        |
+----+-------------+-----------+-------+---------------+---------------+---------+------+---------+------------------------------+
|  1 | PRIMARY     | comments2 | index | NULL          | by_content_id | 9       | NULL | 2359296 | Using where; Using index     |
|  2 | SUBQUERY    | NULL      | NULL  | NULL          | NULL          | NULL    | NULL |    NULL | Select tables optimized away |
+----+-------------+-----------+-------+---------------+---------------+---------+------+---------+------------------------------+
2 rows in set (0.00 sec)
Sitethiefdinsdag 20 september 2011 @ 13:11
Hmm, ik doe mijn JOINS toch bijna alleen op de resultset, of daar nou heel veel snelheidsverbetering in zit vraag ik me af.
GlowMousedinsdag 20 september 2011 @ 14:11
Mijn query zou bij weinig resultaten idd sneller draaien als er ook een index stond op (created_at,comment_id).
StMwoensdag 21 september 2011 @ 17:31
quote:
0s.gif Op dinsdag 20 september 2011 12:51 schreef Sitethief het volgende:
Is EXPLAIN ook goed in te zetten als je een PDO class hebt opgebouwd waarmee je al je queries afhandelt?
quote:
0s.gif Op dinsdag 20 september 2011 13:00 schreef Intrepidity het volgende:

[..]

Binnen je applicatie heb je er niet zo veel aan afaik. Je gebruikt het direct op MySQL om je queries te optimaliseren voordat je ze in je applicatie gaat gebruiken.
Dat hangt er maar net vanaf. Wij werken hier bv aan een behoorlijk grote (web)applicatie met enkele duizenden query's waarvan ook een flink deel automatisch gegenereerd is. We hebben pagina's met meer dan 100 query's en dan is het nogal fijn als je niet alles met de hand hoeft na te lopen. We hebben daarom op de devservers gewoon een analyser meelopen die voor iedere query ook een explain uitvoert en deze analyseert. Als het systeem denkt dat het beter kan zet hij netjes een warnings icoontje bij onze query log die onder iedere pagina staat met de values, tijd etc. Klik je er op krijg je de explain, backtraces en nog veel meer debug informatie :)
GlowMousewoensdag 21 september 2011 @ 17:40
Dit werkt veel lekkerder:

http://www.mysqlperforman(...)maatkit-and-tcpdump/
Flepkewoensdag 21 september 2011 @ 17:48
Nosql
GlowMousewoensdag 21 september 2011 @ 17:50
quote:
3s.gif Op woensdag 21 september 2011 17:48 schreef Flepke het volgende:
Nosql
HandlerSocket
StMwoensdag 21 september 2011 @ 18:04
quote:
Hmm een automatische tool die een samenvatting op iedere pagina zet vs een losse tool die je handmatig moet draaien, eerst een netwerk dump maken en dan analyseren. Ik weet het wel :P De nuttige informatie die er uit komt is vrijwel hetzelfde.

Die tool heeft imo meer zn nut om op productieservers te draaien zodat je een snapshot kan nemen over vele requests en zo de zware query's er uit te vissen, niet voor development :)

quote:
3s.gif Op woensdag 21 september 2011 17:48 schreef Flepke het volgende:
Nosql
Je klinkt imo als een random persoon die gewoon de laatste hype na blaat.
GlowMousewoensdag 21 september 2011 @ 18:18
EXPLAIN is in het begin nog wel handig om de echte ondingen eruit te vissen. Je moet dan bij development je database al wel goed vullen. Bij draaiende servers is hij met name handig omdat hij ook relatief snelle queries eruit vist die heel vaak draaien.
StMwoensdag 21 september 2011 @ 18:22
Klopt, je hebt uiteraard data nodig. Wij hebben gewoon een paar maanden oude (geanonimiseerde) kopie van productie draaien.
wobbelwoensdag 21 september 2011 @ 21:20
Ik heb een hele domme, maar ik ben moe en komer niet meer op :P

SELECT *
FROM producten

en dan waarvan 'prijs' 15 EN/OF 25 is

Ik wil een array krijgen met alle producten die 15 EN/OF 25 euro zijn :P
Tijnwoensdag 21 september 2011 @ 21:24
Wat is het verschil tussen en/of en gewoon of?

1SELECT * FROM `producten` WHERE `prijs` = 15 OR `prijs` = 25;
wobbelwoensdag 21 september 2011 @ 21:26
:') dat bedoel ik...ik moet slapen :P

Ik doe trouwens altijd WHERE (veld = 'waarde' OR veld = 'waarde2') met haakjes. Moet niet uitmaken toch? :P
Diaboxwoensdag 21 september 2011 @ 21:29
Maakt niet uit, zolang je maar consistent blijft in gebruik ervan (wel zo netjes).
wobbelwoensdag 21 september 2011 @ 21:30
quote:
7s.gif Op woensdag 21 september 2011 21:29 schreef Diabox het volgende:
Maakt niet uit, zolang je maar consistent blijft in gebruik ervan (wel zo netjes).
Dat ben ik altijd wel gelukkig :) niks vervelender dan iemand anders z'n programmeerwerk aanpassen en dan elke keer andere zaken tegenkomen. Lastig te lezen voor een eventuele opvolger van mijn werk ;)
Dalandowoensdag 21 september 2011 @ 23:45
Ik heb een getal. 1940239315. En ik moet het leesbaar maken via PHP, dus 1.940.239.315 ofzo. Hoe?
BBQSausagewoensdag 21 september 2011 @ 23:52
quote:
7s.gif Op woensdag 21 september 2011 23:45 schreef Dalando het volgende:
Ik heb een getal. 1940239315. En ik moet het leesbaar maken via PHP, dus 1.940.239.315 ofzo. Hoe?
number_format();
Dalandowoensdag 21 september 2011 @ 23:58
quote:
14s.gif Op woensdag 21 september 2011 23:52 schreef BBQSausage het volgende:

[..]

number_format();
quote:
7s.gif Op woensdag 21 september 2011 23:58 schreef Dalando het volgende:

[..]

_O_
Catbertdonderdag 22 september 2011 @ 09:33
Helpt ook als je weet waarop je moet zoeken, formatting dus ;)
wobbeldonderdag 22 september 2011 @ 10:03
- dom geneuzel, niet gelezen -
Chandlerdonderdag 22 september 2011 @ 16:32
Weet iemand hoe ik het volgende vrij simpel kan maken?

Ik heb 1 database met een paar velden.

gebruiker, type, naam en inhoud.

nu wil ik deze tabel uitlezen maar tegelijk in de zelfde query bepalen of er van de naam meerdere in het tabel voorkomen met de gegeven where

voorbeeld:
1
2
3
4
5
SELECT count(t2.naam) AS totaal,
              t1.*
FROM t1
LEFT JOIN t2 ON t1.naam = t2.naam
WHERE gebruiker = 1

inhoud van database
1
2
3
4
5
6
1 - fruit - appels - aard 1
1 - fruit - appels - aard 2
1 - fruit - appels - aard 3
1 - fruit - bananen - chiqita
1 - fruit - peren - peer
1 - fruit - kiwi - kiwi

nu zie je dat appels er 3x in voorkomt met gebruikers id 1 dus wil ik als uitkomst van de query het volgende hebben.

1
2
3
4
5
6
1 - fruit - appels - aard 1 - 3
1 - fruit - appels - aard 2 - 3
1 - fruit - appels - aard 3 - 3
1 - fruit - bananen - chiqita - 1
1 - fruit - peren - peer - 1
1 - fruit - kiwi - kiwi - 1

Hoe krijg ik dit voor elkaar? zit er al een tijd mee te pielen, ook geprobeerd met FROM t1, t1 t2

Iemand?
GlowMousedonderdag 22 september 2011 @ 16:36
SELECT t1.*,count(*) AS totaal
FROM t1
JOIN t2 ON (t1.naam = t2.naam AND t1.gebruiker = t2.gebruiker)
GROUP BY t1.gebruiker,t1.type,t1.naam
WHERE t1.gebruiker = 1
ORDER BY t1.gebruiker,t1.type,t1.naam
Chandlerdonderdag 22 september 2011 @ 19:12
Duidelijk, die gaat in de verzameldoos! :)
Cue_vrijdag 23 september 2011 @ 10:25
Vraagje

Ik heb een connectie naar mijn database in mijn command prompt. Voer daar dus leuk mijn qrys uit en alles. Maar hoe krijg ik de output die ik daar heb naar bv excel?
Tijnvrijdag 23 september 2011 @ 10:32
Copy/paste?
Cue_vrijdag 23 september 2011 @ 10:35
Is leuk bij kleine lijstjes, maar bij grote bv?
Geen leuke command voor?
Tijnvrijdag 23 september 2011 @ 10:38
Ik maak zelf meestal een CSV-file als het nodig is om data in Excel te importeren. fputcsv() kan je daarbij helpen, maar je zult er wel een klein scriptje omheen moeten schrijven om de juiste data in de juiste file te krijgen.
Cue_vrijdag 23 september 2011 @ 10:47
oke, via php script doen dus. :)
remi1986vrijdag 23 september 2011 @ 10:51
quote:
0s.gif Op vrijdag 23 september 2011 10:47 schreef Cue_ het volgende:
oke, via php script doen dus. :)
Er zijn ook PHP classes voor

http://phpexcel.codeplex.com/


of simpel met de juiste headers

http://forums.digitalpoint.com/showthread.php?t=60681
Cue_vrijdag 23 september 2011 @ 11:08
tnx O+
Chandlervrijdag 23 september 2011 @ 11:30
Heeft iemand een simpel regexje liggen die het volgende doet?

ik heb een blog url
http://www.blog.nl/mijnblog/123-dit-is-mijn-titel.html

nu wil ik alleen het cijfer gedeelte van 123 ophalen en niets meer en niets minder. Nu kan ik natuurlijk opzoek gaan naar de eerste - maar wil dit eigenlijk liever met een regexje doen :P en zoals standaard lukt het mij niet.

Regexje net gedeleted door overschrijven van pagina :{ iemand een linkje/voorbeeldje?
Thomassvrijdag 23 september 2011 @ 12:57
quote:
0s.gif Op vrijdag 23 september 2011 11:30 schreef Chandler het volgende:
Heeft iemand een simpel regexje liggen die het volgende doet?

ik heb een blog url
http://www.blog.nl/mijnblog/123-dit-is-mijn-titel.html

nu wil ik alleen het cijfer gedeelte van 123 ophalen en niets meer en niets minder. Nu kan ik natuurlijk opzoek gaan naar de eerste - maar wil dit eigenlijk liever met een regexje doen :P en zoals standaard lukt het mij niet.

Regexje net gedeleted door overschrijven van pagina :{ iemand een linkje/voorbeeldje?
In woorden: match een forward slash, dan een of meer getallen, dan een of meer niet-forward slashes, dan het einde van de string.

Lukt het daarmee?
GIvrijdag 23 september 2011 @ 13:01
Waarom doe je niet gewoon http://www.blog.nl/mijnblog/123/dit-is-mijn-titel ?
mstxvrijdag 23 september 2011 @ 13:02
quote:
0s.gif Op vrijdag 23 september 2011 11:30 schreef Chandler het volgende:
Nu kan ik natuurlijk opzoek gaan naar de eerste - maar wil dit eigenlijk liever met een regexje doen :P
Waarom?
Pakspulvrijdag 23 september 2011 @ 13:13
quote:
0s.gif Op vrijdag 23 september 2011 11:30 schreef Chandler het volgende:
Heeft iemand een simpel regexje liggen die het volgende doet?

ik heb een blog url
http://www.blog.nl/mijnblog/123-dit-is-mijn-titel.html

nu wil ik alleen het cijfer gedeelte van 123 ophalen en niets meer en niets minder. Nu kan ik natuurlijk opzoek gaan naar de eerste - maar wil dit eigenlijk liever met een regexje doen :P en zoals standaard lukt het mij niet.

Regexje net gedeleted door overschrijven van pagina :{ iemand een linkje/voorbeeldje?
gebruik strpos om de eerste - (streepje) op te zoeken en substr dan vanaf aantal karakters dat je URL lang is tot de positie van het eerste streepje.
Sitethiefvrijdag 23 september 2011 @ 13:29
Iemand ervaring met PDO + InnoDB? Insert queries die met PDO + MyISAM goed liepen doen het met InnoDB niet via PDO, wel direct in de database. Kheb al flink gezocht naar informatie hier over maar kan niet echt specifiek deze case vinden.

Bij Inserts via PDO met InnoDB met gebruik van BindParam() gaat het mis. BindParam() geeft wél true terug, en debugDumpParams () geeft ook aan dat de parameters ook gebonden zijn. Maar er wordt gewoon ':name' ipv 'NaamVanObject' geinsert. Iets wat nog vervelender is als ':key' als string ipv als int in een foreign key veld geinsert wordt (of iig een poging).

Ik heb geen zin om de functionaliteiten van PDO volledig te om zeilen alleen maar omdat Innodb hier blijkbaar niet goed mee om gaat.
GIvrijdag 23 september 2011 @ 13:49
quote:
0s.gif Op vrijdag 23 september 2011 13:13 schreef Pakspul het volgende:

[..]

gebruik strpos om de eerste - (streepje) op te zoeken en substr dan vanaf aantal karakters dat je URL lang is tot de positie van het eerste streepje.
Of een implode van de url op / en dan het laatste resultaat imploden op - en dan de eerste pakken ?
Thomassvrijdag 23 september 2011 @ 14:04
quote:
3s.gif Op vrijdag 23 september 2011 13:49 schreef GI het volgende:

[..]

Of een implode van de url op / en dan het laatste resultaat imploden op - en dan de eerste pakken ?
1
2
3
<?php
current
(explode("-"end(explode("/""http://www.blog.nl/mijnblog/123-dit-is-mijn-titel.html"))));
?>

Zeer leesbaar uiteraard
GIvrijdag 23 september 2011 @ 14:27
quote:
0s.gif Op vrijdag 23 september 2011 14:04 schreef Thomass het volgende:

[..]
[ code verwijderd ]

Zeer leesbaar uiteraard
Ja, want leesbare code krijg je natuurlijk door op die manier te coderen...