abonnement Unibet Coolblue Bitvavo
pi_48192034
Het gebruik van enkele (apostrophe) of dubbele aanhalingstekens scheelt een beetje, maar is nauwelijks merkbaar. Overigens zit er een verschil tussen het gebruik van enkele of dubbele aanhalingstekens. Alles wat tussen dubbele aanhalingstekens staat word dus geparsed:

1
2
3
4
5
<?php
$var
='Pietje';
echo 
"Ik heet $var";
// Resultaat: Ik heet Pietje
?>


1
2
3
4
5
<?php
$var
='Pietje';
echo 
'Ik heet $var';
// Resultaat: Ik heet $var
?>


Er zijn overigens veel meer manieren om iets te doen, zo kun je bijvoorbeeld ook een punt gebruiken, als volgt:

1
2
3
4
5
<?php
$var
='Pietje';
echo 
"Ik heet ".$var;
// Resultaat: Ik heet Pietje
?>


1
2
3
4
5
<?php
$var
='Pietje';
echo 
'Ik heet '.$var;
// Resultaat: Ik heet Pietje
?>


Mocht je in een PHP regel die je met dubbele aanhalingstekens opent dubbele aanhalingstekens willen gebruiken, of in een PHP regel die je met een enkel aanhalingsteken opent enkele aanhalingstekens gebruiken, dan gebruik je gewoon een 'escape character', die heeft vrijwel elke programmeertaal. Wat voorbeelden:

1
2
3
4
5
<?php
$var
='Pietje';
echo 
"Ik heet '$var'.";
// Resultaat: Ik heet 'Pietje'.
?>


1
2
3
4
5
<?php
$var
='Pietje';
echo 
"Ik heet \"$var\"";
// Resultaat: Ik heet "Pietje"
?>


1
2
3
4
5
<?php
$var
='Pietje';
echo 
'Ik heet " '$var .' ";
// Resultaat: Ik heet " Pietje "
?>


Ik kom dit heel vaak tegen omdat al mijn PHP bestanden altijd volledig uit PHP bestaan, in tegenstelling tot een soort van HTML pagina met meerdere PHP 'blocks' (aparte stukjes tussen de <? en ?> tags). Zoals eerder hier gezegd is is het héél belangrijk om alle HTML attributen te quoten, dus stel je hebt het volgende stukje HTML:

1
2
3
4
5
6
7
<div style="font-weight:bold; background-color:#0000ff;">

<p>test en zo, ik ben "Gabber Piet"!</p>

<img src="plaatje.jpg" style="width:100px; height:100px;" onclick="alert('Je hebt op het plaatje geklikt!');" alt="Plaatje" />

</div>


Dan zou ik, als ik een bestand volledig als PHP wil parsen, dus het volgende krijgen:

1
2
3
4
5
6
7
8
9
<?php
echo "<div style=\"font-weight:bold; background-color:#0000ff;\">

<p>test en zo, ik ben \"Gabber Piet\"!</p>

<img src=\"plaatje.jpg\" style=\"width:100px; height:100px;\" onclick=\"alert('Je hebt op het plaatje geklikt!');\" alt=\"Plaatje\" />

</div>"
;
?>


Puur een kwestie van de syntaxis kennen. Zoals ik al eerder zei, heeft vrijwel elke programmeertaal een escape character. In ASP kune je bijvoorbeeld een dubbel aanhalingsteken 'escapen' door er een tweede dubbel aanhalingsteken voor te zetten. Met andere woorden, in PHP is de escape character een , in ASP is de escape character een ".
pi_48193738
voor de regex / string koningen onder jullie:

Ik wil van een gegeven string checken of dit een geldige URL is. Nu heb ik een regex die allerlei mogelijke strings accepteert (niet alleen www.domein.nl, maar ook http://www.domein.nl:1080/~home/ bijvoorbeeld).

Nu wil ik echter ook de TLD checken tegen een lijst met bestaande TLD's, ik krijg deze alleen niet altijd te pakken in mijn string.... Als het ding op .nl / .com / .whatever eindigt lukt het wel natuurlijk, maar als er nog wat achteraan komt gaat het fout.

Wie weet raad?


Gerelateerd: vanaf welke PHP versie werken regex matches als P{M} ? In PHP 4.3.9 op mijn vorige Windows server werkte het, maar op mijn huidige Linux server niet
pi_48213484
Hoe kan ik met 1 regex oid alle spaties en - uit een string verwijderen?
pi_48214025
quote:
Op dinsdag 10 april 2007 21:51 schreef Xcalibur het volgende:
Als het ding op .nl / .com / .whatever eindigt lukt het wel natuurlijk, maar als er nog wat achteraan komt gaat het fout.

Wie weet raad?
Wat voor regex heb je nu dan?
quote:
Gerelateerd: vanaf welke PHP versie werken regex matches als P{M} ? In PHP 4.3.9 op mijn vorige Windows server werkte het, maar op mijn huidige Linux server niet
Dat staat gewoon in de manual hoor, zie deze pagina:
quote:
Unicode character properties
Since PHP 4.4.0 and 5.1.0, three additional escape sequences to match generic character types are available when UTF-8 mode is selected. They are:
\p{xx}
a character with the xx property
\P{xx}
a character without the xx property
\X
an extended Unicode sequence
pi_48214055
quote:
Op woensdag 11 april 2007 13:22 schreef super-muffin het volgende:
Hoe kan ik met 1 regex oid alle spaties en - uit een string verwijderen?
Je moet niet alles met regexen willen oplossen
1
2
3
<?php
$string 
str_replace(array(' ''-'), ''$string);
?>
pi_48214672
thnx, bijna zoals ik het had, alleen dan 2 maal een str_replace.
  woensdag 11 april 2007 @ 14:39:38 #207
161108 JohannesPaulus
Divide and conquer
pi_48216288
quote:
Op zaterdag 7 april 2007 16:11 schreef JeRa het volgende:

[..]

Zet je Messenger client aan
Sorry, ik zag je reactie zojuist pas
Ik stuur je een email met mijn probleem. Zodra het kan kom ik online op MSN
In peace, sons bury their fathers; in war, fathers bury their sons. (484 BC–ca.425 BC, Herodotus)
He who knows when he can fight and when he cannot will be victorious. (c. 544 – 496 BC, Sun Tzu)
pi_48220325
hoe kun je simpel ë veranderen naar e, is hier een functie voor? ik kon deze namelijk zelf niet vinden
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 11 april 2007 @ 16:30:27 #209
161108 JohannesPaulus
Divide and conquer
pi_48220490
quote:
Op woensdag 11 april 2007 16:27 schreef Chandler het volgende:
hoe kun je simpel ë veranderen naar e, is hier een functie voor? ik kon deze namelijk zelf niet vinden
je kan ë veranderen naar e in kladblok
bewerken -> vervangen

Of bedoel je dat niet?
In peace, sons bury their fathers; in war, fathers bury their sons. (484 BC–ca.425 BC, Herodotus)
He who knows when he can fight and when he cannot will be victorious. (c. 544 – 496 BC, Sun Tzu)
pi_48220497
quote:
Op woensdag 11 april 2007 16:27 schreef Chandler het volgende:
hoe kun je simpel ë veranderen naar e, is hier een functie voor? ik kon deze namelijk zelf niet vinden :{
1
2
3
<?php
echo str_replace("ë","e","Meine namë sëite Hans");
?>


:+
pi_48221228
@JohannesPaulus; nee natuurlijk niet in kladblok

@Geqxon: haha, ik had gehoopt dat er een functie was die ë, Ï etc kon omzetten naar e en i maar helaas
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_48221529
Die functie is er:

1
2
3
4
<?php
$txt 
htmlentities($txt); 
$txt preg_replace('`&(.)(tilde|circ|grave|acute|uml|ring|cedil);`''$1'$txt);
?>


Héllo Çårmëñ, hôw àré yõü?

wordt:

Hello Carmen, how are you?
pi_48221830
@Chandler

De oplossing is erg afhankelijk van de character set die je gebruikt HuHu's manier hierboven is wellicht de slimste, je moet dan htmlentities() wel doorgeven welke character set je gebruikt.

1
2
3
4
<?php
 
$txt 
htmlentities($txtENT_QUOTES'UTF-8');
?>
  woensdag 11 april 2007 @ 17:41:57 #214
71919 wonderer
Hung like a My Little Pony
pi_48223326
Ik heb een heel raar MySQL probleem en mijn host weet niet echt wat ie eraan kan doen, misschien komt het een van jullie bekend voor.

Ik heb twee domeinen die allebei gebruik maken van een aantal databases, die ik met phpMyAdmin kan openen (allemaal onder hetzelfde account, hoef niet per domein apart in te loggen). Vorige week is de MySQL versie geupdate. Ik moest toen opnieuw mijn database-users toevoegen aan de databases, maar verder werkte alles prima.

Op een ding na.

Mijn tweede domein lijkt een andere database te gebruiken dan ik kan openen met PMA. Wat ik in PMA zie, is al sinds 8 april niet meer geupdate, terwijl formulieren via de site (forum enzo) wel gewoon hun data wegschrijven. Wat ik in PMA verander, staat daarna niet op de site. De databases die bij mijn eerste domein horen, werken wel gewoon naar behoren.

Mijn host lijkt maar niet te begrijpen wat het probleem is, zelfs na een paar screenshots. Heeft iemand van jullie een idee? Ik heb het idee dat er ergens een verbinding wordt gemaakt met een backup database of zo, maar dat verklaart nog niet waarom de databases van het eerste domein wel gewoon werken...

Edit: waarom is het altijd zo dat ik vrijwel direct na in dit topic gepost te hebben een brainwave krijg die het probleem oplost? Ik heb geprobeerd in te loggen via het tweede domein (zelfde gegevens, alleen ander domein dus) en daar is het precies andersom. Hoe weet PMA welke databases bij welke site horen? Ik vind het maar lastig, het zou handiger zijn als ik de andere databases gewoon niet kon zien of zo, of dat het net als eerst weer allemaal via een PMA versie kon

[ Bericht 21% gewijzigd door wonderer op 11-04-2007 17:49:19 ]
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_48223785
@wonderer

Databases hebben in eerste instantie niets met websites te maken. Simpelweg komt het neer op een combinatie van serveradres en databasenaam die bepaalt welke database je voor je neus krijgt, de username en het wachtwoord waarmee je inlogt bepaalt vervolgens welke rechten je hebt op de database. Oftewel: kijk naar de connection strings van beide domeinen; zijn de databasenamen én het serveradres gelijk?
  woensdag 11 april 2007 @ 18:06:12 #216
71919 wonderer
Hung like a My Little Pony
pi_48224001
Ik weet niet goed om welke informatie je nu vraagt en waar ik die kan vinden. Ik log op beide domeinen in via poort 2082 naar cPanel en van daar klik ik op PMA. Het enige verschil in het adres is dus het domein in de adresbalk. Ze connecten allebei naar localhost en ik log met dezelfde gegevens in. Ik zie dus in beide versies van PMA dezelfde lijst met databases, alleen correspondeert de data niet meer met wat er op dit moment in staat, afhankelijk van via welk domein je hem bezoekt.

Het lijkt er dus op dat ze een kopie hebben gemaakt van de hele set en dat de ene site de ene kopie update en de andere site de andere kopie. Ik snap alleen niet hoe het onderscheid gemaakt kan worden. Ik heb namelijk de database voor het tweede domein destijds gewoon via de PMA van het eerste domein gemaakt.
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
  woensdag 11 april 2007 @ 18:09:18 #217
71919 wonderer
Hung like a My Little Pony
pi_48224072
Overigens merk ik net dat ze hetzelfde geintje hebben uitgehaald met mijn ftp server. Tweemaal inloggen, op een ander domein, en ik krijg bij allebei dezelfde lijst, maar als ik files voor domein twee upload via de ftp van domein een, werkt het niet en vice versa.

Dus het zal wel niet aan mysql liggen maar aan hun server setup.
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_48224195
@wonderer

Wijzen jouw twee domeinen naar dezelfde server? Want als je verbindt met 'localhost' betekent dat alleen dat je met de server verbindt waarop de website wordt gedraaid. Als ze je hele site hebben gekopiëerd zou ik het nog eens gaan navragen
  woensdag 11 april 2007 @ 18:18:10 #219
71919 wonderer
Hung like a My Little Pony
pi_48224385
Yeah, het tweede domein is een "add-on" domein. Als ik inlog op ftp zie ik bij beide sites ook dezelfde lijst, ik kan alleen de ene site niet updaten als ik ben ingelogd op het andere domein. Beetje duf Moet ik steeds op gaan letten of ik wel op het goede domein ben ingelogd.
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_48224467
quote:
Op woensdag 11 april 2007 18:18 schreef wonderer het volgende:
Yeah, het tweede domein is een "add-on" domein. Als ik inlog op ftp zie ik bij beide sites ook dezelfde lijst, ik kan alleen de ene site niet updaten als ik ben ingelogd op het andere domein. Beetje duf Moet ik steeds op gaan letten of ik wel op het goede domein ben ingelogd.
Als jij in eerste instantie beide domeinen naar dezelfde bestanden/fysieke locatie gekoppeld had en het sinds de veranderingen van je webhoster niet meer zo is, moet je die dus eens gaan aanspreken maar verder valt het een beetje buiten dit topic.
  woensdag 11 april 2007 @ 18:21:31 #221
71919 wonderer
Hung like a My Little Pony
pi_48224500
Yep, thanks. Ik dacht eerst dat het alleen aan mysql lag, vandaar.

Ik zal erover ophouden
"Pain is my friend. I can trust pain. I can trust pain to make my life utterly miserable."
"My brain is too smart for me."
"We don't need no education." "Yes you do, you just used a double negative."
pi_48229901
quote:
Op woensdag 11 april 2007 17:01 schreef JeRa het volgende:
@Chandler

De oplossing is erg afhankelijk van de character set die je gebruikt HuHu's manier hierboven is wellicht de slimste, je moet dan htmlentities() wel doorgeven welke character set je gebruikt.
[ code verwijderd ]
Ik gebruik gewoon een standaard karakterset dus de versie van HuHu is reeds voldoende.

Mag ik beide heren weer vriendelijk bedanken!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_48229946
quote:
Op woensdag 11 april 2007 13:37 schreef JeRa het volgende:
Wat voor regex heb je nu dan?
De regex op zich doet het prima, die is verder niet zo relevant (moet hem opzoeken, kan ik nu niet bij )
Waar het mij om gaat is dat ik voor of na die regex de .nl / .com / etc eruit kan filteren zodat ik die apart kan checken...
quote:
Op woensdag 11 april 2007 13:37 schreef JeRa het volgende:
Dat staat gewoon in de manual hoor, zie deze pagina:
Damn... ik heb er toch al vaak genoeg naar gezocht
thanks iig!
pi_48230205
quote:
Op dinsdag 10 april 2007 21:51 schreef Xcalibur het volgende:
voor de regex / string koningen onder jullie:

Ik wil van een gegeven string checken of dit een geldige URL is. Nu heb ik een regex die allerlei mogelijke strings accepteert (niet alleen www.domein.nl, maar ook http://www.domein.nl:1080/~home/ bijvoorbeeld).

Nu wil ik echter ook de TLD checken tegen een lijst met bestaande TLD's, ik krijg deze alleen niet altijd te pakken in mijn string.... Als het ding op .nl / .com / .whatever eindigt lukt het wel natuurlijk, maar als er nog wat achteraan komt gaat het fout.

Wie weet raad?
http://nl2.php.net/parse_url

Vervolgens van "hostname" alles achter de laatste . grijpen
pi_48230269
quote:
Op woensdag 11 april 2007 20:36 schreef Geqxon het volgende:
http://nl2.php.net/parse_url

Vervolgens van "hostname" alles achter de laatste . grijpen
Tof! Alles achter de . is geen probleem, ik ga het proberen!

Edit: is al gelukt

[ Bericht 11% gewijzigd door Xcalibur op 11-04-2007 20:42:42 ]
pi_48230596
quote:
Op woensdag 11 april 2007 20:37 schreef Xcalibur het volgende:

[..]

Tof! Alles achter de . is geen probleem, ik ga het proberen!

Edit: is al gelukt ^O^
1
2
3
4
5
6
7
<?php
$url        
"http://www.domein.nl:1080/~home/";
$host        parse_url($url,1);
$tld        substr($host,strrpos($host,"."));

echo 
$tld;
?>


O-)
pi_48230824
quote:
Op woensdag 11 april 2007 20:44 schreef Geqxon het volgende:
[ code verwijderd ]

O-)
ik had em in 1 regel ... maar ik gebruik em dan ook in een in_array() check binnen een functie ;)
1strrchr(parse_url($value, PHP_URL_HOST), '.'))
  donderdag 12 april 2007 @ 03:01:18 #228
19840 Libris
Live from Singapore
pi_48243129
Kort vraagje:

Kan ik een maximum grootte voor een mysql definieren en zo ja, hoe?
pi_48244706
quote:
Op donderdag 12 april 2007 03:01 schreef Libris het volgende:
Kort vraagje:

Kan ik een maximum grootte voor een mysql definieren en zo ja, hoe?
"MySQL" is de naam voor een relationeel database beheerssysteem dat MyISAM, InnoDB en nog wat andere typen tabellen kan aanmaken. Wil je de maximum grootte (in bytes?) van een database bepalen?
  FOK!-Schrikkelbaas donderdag 12 april 2007 @ 09:26:49 #230
1972 Swetsenegger
Egocentrische Narcist
pi_48245334
*gromt*

Ik heb hier een server staan waarop apache2 en php draait. Die fungeert als intranet en webbased applicatie servertje. Op dit moment draaien er 3 'domeinen' en die wil ik graag eenvoudiger kunnen benaderen dan server/domein

In mijn host file heb ik dus al voor alle 3 de 'domeinen' het ip opgenomen. Ik kan nu dus volstaan om 'intranet' of 1 van de andere 2 namen in te tikken om op de server terecht te komen. Maar vervolgens moet ik dan apache vertellen wat waar naartoe moet:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NameVirtualHost *

    <VirtualHost *>
    ServerName intranet
    DocumentRoot /www/intranet
    </VirtualHost>

    <VirtualHost *>
    ServerName macdb
    DocumentRoot /www/Mac_db_mssql
    </VirtualHost>
    
    <VirtualHost *>
    ServerName pidvid
    DocumentRoot /www/PID_VID_DB
    </VirtualHost>


Ik krijg nu van apache de error terug dat alle 3 de documentroots niet bestaan als ik na de aanpassing van de httpd.conf de service herstart.

Wat doe ik fout?
pi_48245383
@Swetsenegger

De documentroots bestáán wel? Dus je hebt onder je root een map www met daarin intranet, Mac_db_mssql en PID_VID_DB (inclusief hoofd- en kleine letters?)
  FOK!-Schrikkelbaas donderdag 12 april 2007 @ 09:34:42 #232
1972 Swetsenegger
Egocentrische Narcist
pi_48245526
quote:
Op donderdag 12 april 2007 09:29 schreef JeRa het volgende:
@Swetsenegger

De documentroots bestáán wel? Dus je hebt onder je root een map www met daarin intranet, Mac_db_mssql en PID_VID_DB (inclusief hoofd- en kleine letters?)
Ja... afhankelijk van wat Apache als root ziet.

Ik heb C:AppServ, met daarin /Apache2, /www, /php, etc.
In de www folder staan de genoemde mappen

-edit-
Dit staat in de httpd.conf
1ServerRoot "C:/AppServ/Apache2"


-edit2- hmz, ziet hij de apache2 folder dan waarschijnlijk als root, dus
1DocumentRoot ../www/intranet

zou wellicht wel werken of denk ik nu te eenvoudig?

[ Bericht 9% gewijzigd door Swetsenegger op 12-04-2007 09:39:46 ]
pi_48245716
@Swetsenegger

Nee, dat is de zogenaamde configroot, dus waar Apache al zijn configs gaat opzoeken. Meer informatie daarover vind je hier. Héél eventueel gaat jouw idee wel werken, maar dan moet je de eerste slash weghalen (aangezien die eerste slash wordt gezien als een directory, en dat is in dit geval de root).
  FOK!-Schrikkelbaas donderdag 12 april 2007 @ 10:07:37 #234
1972 Swetsenegger
Egocentrische Narcist
pi_48246414
quote:
Op donderdag 12 april 2007 09:41 schreef JeRa het volgende:
@Swetsenegger

Nee, dat is de zogenaamde configroot, dus waar Apache al zijn configs gaat opzoeken. Meer informatie daarover vind je hier. Héél eventueel gaat jouw idee wel werken, maar dan moet je de eerste slash weghalen (aangezien die eerste slash wordt gezien als een directory, en dat is in dit geval de root).
Het werkt gek genoeg met die puntjes ervoor dus DocumentRoot ../www/intranet
pi_48246693
quote:
Op donderdag 12 april 2007 10:07 schreef Swetsenegger het volgende:

[..]

Het werkt gek genoeg met die puntjes ervoor dus DocumentRoot ../www/intranet
Dat is niet zo gek aangezien je met ServerRoot er dus kennelijk de feitelijke werkdirectory mee instelt dan werken relatieve paden dus net zo goed. Je eerste methode werkte niet vanwege de slash op het begin, die geeft een absoluut pad aan (/ wordt dan vertaald naar C:).
  donderdag 12 april 2007 @ 10:29:37 #236
19840 Libris
Live from Singapore
pi_48247140
quote:
Op donderdag 12 april 2007 08:53 schreef JeRa het volgende:

[..]

"MySQL" is de naam voor een relationeel database beheerssysteem dat MyISAM, InnoDB en nog wat andere typen tabellen kan aanmaken. Wil je de maximum grootte (in bytes?) van een database bepalen?
Ik heb dus meerdere MyISAM tabellen voor meedere users. En inderdaad, een grootte in (mega)bytes.

Bedankt
pi_48247347
quote:
Op donderdag 12 april 2007 10:29 schreef Libris het volgende:

[..]

Ik heb dus meerdere MyISAM tabellen voor meedere users. En inderdaad, een grootte in (mega)bytes.
Dat gaat niet vanuit MySQL ze hebben geen instelling gecreëerd waarmee je makkelijk de databases in grootte kunt beperken. Twee oplossingen:

1) Gebruik quotas en maak de user met quota eigenaar van de database (terwijl MySQL nog wel de database kan lezen). Dan zal MySQL nooit fysiek de database groter krijgen dan de hoeveelheid bytes die het besturingssysteem oplegt.

2) Gebruik passieve controle. Voer om het uur (ofzo) een script uit waarmee je de totale grootte van elke database in kaart brengt. Zodra een database te groot wordt stuur je een mailtje, set je een kolom in een statistiekentabel op true, of wat dan ook
  FOK!-Schrikkelbaas donderdag 12 april 2007 @ 10:51:26 #238
1972 Swetsenegger
Egocentrische Narcist
pi_48247994
quote:
Op donderdag 12 april 2007 10:16 schreef JeRa het volgende:

[..]

Dat is niet zo gek aangezien je met ServerRoot er dus kennelijk de feitelijke werkdirectory mee instelt dan werken relatieve paden dus net zo goed. Je eerste methode werkte niet vanwege de slash op het begin, die geeft een absoluut pad aan (/ wordt dan vertaald naar C:).
Ok, nou bedankt het werkt
Voor het eerst heb ik virtual hosts werkend gekregen
  donderdag 12 april 2007 @ 11:37:41 #239
12221 Tijn
Powered by MS Paint
pi_48249767
Ik loop tegen een probleem met MySQL aan waar ik niet uitkom. Ik heb een table die 'news' heet met daarin de velden id, timestamp, title en content. Nu wil ik graag een lijstje van nieuwsitems laten zien, met de nieuwste eerst. Dus ik heb daarvoor deze query:

1SELECT * FROM news ORDER BY timestamp DESC


Nogal recht toe recht aan en dat werkt ook prima. De uitkomst is zoiets:



Maar nu! Het ding is, het timestamp is niet echt een timestamp, maar wordt gemaakt met alleen de dag, maand en jaar. Items die opdezelfde dag zijn geplaats, krijgen dus ook hetzelfde timestamp. En daarmee ontstaat een probleem.

Ergens anders wil ik namelijk ook een lijstje van items weergeven op volgorde van tijd, maar dan alleen de nieuwste tien. Die query ziet er zo uit:

1SELECT * FROM news ORDER BY timestamp DESC LIMIT 0,10


En daar komt dit uit:



De volgorde van de items is nu veranderd, dat is niet de bedoeling!

Ik dacht het op te lossen door behalve naar het timestamp, ook naar het id te kijken. Ik hoopte dat de lijst dan alsnog op volgorde van tijd gesorteerd zou worden, maar bij gelijke timestamps, de hoogte van het id de volgorde zou bepalen. Zo staat dat bijvoorbeeld ook hier uitgelegd.

Echter, als ik dat probeer, met bijvoorbeeld deze query:

1SELECT * FROM news ORDER BY timestamp, id DESC LIMIT 0,10


Is de output totaal niet wat ik verwacht:



Het lijkt wel precies verkeerd om ofzo :?

Iemand een idee hoe ik wel het resultaat krijg wat ik voor ogen heb?
pi_48249901
@Tijn

Aan het resultaat van je eerste query te zien is de volgorde van de ID's (primary keys, PK) niet hetzelfde als die van de timestamp, dus kun je de PK niet in wat voor sortering dan ook gebruiken als het gaat om tijd. Dé oplossing is het verbeteren van je timestamp, eventueel door UNIX_TIMESTAMP() te gebruiken wanneer je een record toevoegt aan die tabel voor zover ik kan zien heb je in die tabel te weinig informatie om het nog te kunnen 'herstellen'.

Als je toch altijd dezelfde volgorde wilt zien, kun je eventueel ook op titel sorteren. Dan krijg je dus een sortering op dag, en vervolgens op alfabet.
pi_48250051
Tijn, van welke app zijn die screenshot? Lijkt me erg handig
  donderdag 12 april 2007 @ 11:45:07 #242
12221 Tijn
Powered by MS Paint
pi_48250057
quote:
Op donderdag 12 april 2007 11:41 schreef JeRa het volgende:

Aan het resultaat van je eerste query te zien is de volgorde van de ID's (primary keys, PK) niet hetzelfde als die van de timestamp, dus kun je de PK niet in wat voor sortering dan ook gebruiken als het gaat om tijd.
Dit snap ik niet. Waarom kan ik niet eerst op volgorde van timestamp sorteren en daarbinnen op id?
  donderdag 12 april 2007 @ 11:45:37 #243
12221 Tijn
Powered by MS Paint
pi_48250070
quote:
Op donderdag 12 april 2007 11:45 schreef super-muffin het volgende:
Tijn, van welke app zijn die screenshot? Lijkt me erg handig
CocoaMySQL.
pi_48250237
quote:
Op donderdag 12 april 2007 11:37 schreef Tijn het volgende:
De volgorde van de items is nu veranderd, dat is niet de bedoeling!
De volgorde is prima, het probleem is dat hij eerst je resultaat LIMIT naar 10 records en dán pas gaat sorteren (die tien records dus) in plaats van de hele batch sorteert en daar de eerste 10 records van pakt.

Dwz, daar lijkt het wel op in ieder geval. Zo goed was mijn MySQL-fu nu ook weer niet dat ik dat zeker weet.
"If you are depressed you shouldn't be in C major!" - Rick Beato
pi_48250288
quote:
Op donderdag 12 april 2007 11:50 schreef Litpho het volgende:

[..]

De volgorde is prima, het probleem is dat hij eerst je resultaat LIMIT naar 10 records en dán pas gaat sorteren (die tien records dus) in plaats van de hele batch sorteert en daar de eerste 10 records van pakt.
Dat is onzin.
quote:
Op donderdag 12 april 2007 11:45 schreef Tijn het volgende:

[..]

Dit snap ik niet. Waarom kan ik niet eerst op volgorde van timestamp sorteren en daarbinnen op id?
Dat kán wel, maar je hebt er niets aan. Zoals je uit je eerste screenshot kunt opmaken heeft de volgorde van id niets te maken met de volgorde van de timestamp

edit: de oplossing is dit:

ORDER BY timestamp DESC, id DESC;

Want als je niets aangeeft neemt MySQL ASC aan en dat was zo bij timestamp.
pi_48250381
quote:
Op donderdag 12 april 2007 11:51 schreef JeRa het volgende:

[..]

Dat is onzin.
Dat is mogelijk, zoveel verstand heb ik niet van MySQL. Oracle ROWNUM functioneert wel op een dergelijke manier (storend genoeg).
"If you are depressed you shouldn't be in C major!" - Rick Beato
pi_48250429
quote:
Op donderdag 12 april 2007 11:54 schreef Litpho het volgende:

[..]

Dat is mogelijk, zoveel verstand heb ik niet van MySQL. Oracle ROWNUM functioneert wel op een dergelijke manier (storend genoeg).
Als je in Oracle zoiets doet:

SELECT * FROM tabel ORDER BY kolom1 ASC, kolom2 DESC LIMIT 10;

Wordt het sorteren toch echt vóór het limiteren uitgevoerd hoor
  donderdag 12 april 2007 @ 11:55:44 #248
12221 Tijn
Powered by MS Paint
pi_48250450
quote:
Op donderdag 12 april 2007 11:51 schreef JeRa het volgende:

[..]

Dat kán wel, maar je hebt er niets aan. Zoals je uit je eerste screenshot kunt opmaken heeft de volgorde van id niets te maken met de volgorde van de timestamp

edit: de oplossing is dit:

ORDER BY timestamp DESC, id DESC;

Want als je niets aangeeft neemt MySQL ASC aan en dat was zo bij timestamp.
Ah! Maar zo is 'ie dan toch goed? Nu is de volgorde van de getoonde items altijd in orde, zowel met als zonder LIMIT geeft 'ie de nieuwste items eerst en altijd op dezelfde volgorde.
pi_48250490
quote:
Op donderdag 12 april 2007 11:45 schreef Tijn het volgende:

[..]

CocoaMySQL.
Dank je wel
pi_48250504
quote:
Op donderdag 12 april 2007 11:55 schreef JeRa het volgende:

[..]

Als je in Oracle zoiets doet:

SELECT * FROM tabel ORDER BY kolom1 ASC, kolom2 DESC LIMIT 10;

Wordt het sorteren toch echt vóór het limiteren uitgevoerd hoor
Nee, dan klapt je query omdat LIMIT niet bestaat .
"If you are depressed you shouldn't be in C major!" - Rick Beato
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')