Het gaat allemaal heel erg leuk moet ik zeggen. Mede dankzij deze site.
Ik wil nu echter weer iets waarvan ik zelf problemen zie. Misschien iemand een iedee. Het is niet de bedoeling de database structuur aan te passen, dit blijft namelijk een phpbb forum.

Ik gebruik deze query om data zichtbaar te maken op mijn site. De functie zorgt voor de output.

$sql = 'SELECT * '
. ' FROM `phpbb_posts_text` '
. ' WHERE `post_subject` '
. ' LIKE "2006 01%"'
. ' ORDER BY `post_subject` DESC LIMIT 0, 30';
Display($sql);

Het veld post_subject bevat zoiets als dit:
2005 12 01 Muziek; Marillion; Garden party

Is het mogelijk om de manier van sorteren te beginnen op de 12e karakter van het veld? Dus dan selecteer ik vanaf muziek die dan op alfabet kom te staan ipv de datum. Iets in mij zegt dat dit niet echt makkelijk gaat. tenzij ik de data achteraf na het lezen ga selecteren.

Groet,
Rob
Interessante vraag. Je zou iets als ORDER BY SUBSTR(veld,8) kunnen proberen.
Mysql.com

The following statements will return the second to sixth row from the tbl table:

mysql> SET @skip=1; SET @numrows=5;
mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?, ?";
mysql> EXECUTE STMT USING @skip, @numrows;



Misschien kan je hier wat mee...
Ik heb net even getest en SUBSTR werkt hier niet. Het moet SUBSTRING zijn, dan doet hij het.
Mijn post is ook beetje onzin geloof ik... Zie nu pas dat dat in de console gebeurt. Zijn 3 querys voor nodig...
Echt fantastisch

SELECT *
FROM `phpbb_posts_text`
WHERE `post_subject`
LIKE "%muziek%"
ORDER BY SUBSTRING( `post_subject` , 11 ) LIMIT 0 , 30

Mooi taaltje hoor :)

Kan ik dan ook deze eerste 11 karakters uit deze 'post_subject' weglaten uit het resultaat? Natuurlijk kan ik het weghalen achteraf, maar kan het ook verwijderd worden in de query. Het veld moet in database natuurlijk zelfde blijven, maar in het resultaat van de query mag het weg.

Rob
Een paar opmerkingen over de query. 2006 01 klinkt mij als een mogelijke datum in de oren. Echter, je behandelt deze met LIKE als een textveld. Wanneer het een datum is, dan hoop ik dat je deze als DATE (of DATETIME) hebt opgeslagen. Je kunt vervolgens beter gebruik maken van de datum-functies YEAR() en MONTH() om de gewenste gegevens op te halen.

Backtics horen niet thuis in een query. Die worden alleen door MySQL geaccepteerd en heb je alleen nodig wanneer je gereserveerde woorden als tabel- of kolomnaam gaat gebruiken. Dat gaat vroeg of laat problemen opleveren. Niet doen dus.

Om je query sneller te maken, kun je i.p.v. een * beter noteren welke kolommen je allemaal nodig hebt. Het is maar zelden dat je alle gegevens nodig hebt.

Voorbeeld met lange notatie voor de overzichtelijkheid (heeft mijn voorkeur, voorkomt fouten):

SELECT
kolomnaam,
nogeenkolomnaam,
etc
FROM
phpbb_posts_text
WHERE
YEAR(post_subject) = 2006
AND
MONTH(post_subject) = 1
ORDER BY
SUBSTRING(post_subject,8)
DESC
LIMIT 0, 30
Dank Frank,

Ik begrijp precies wat he bedoeld, tenminste de strekking van je verhaal. Maar omdat ik een bestaande database structuur gebruik waren de velden al gedefineerd. Deze liggen vast en wil en kan ik niet veranderen, omdat het forum wat gebruik maakt van deze database dan niet meer werk. Het is dus een textveld. En de enige manier om daar datum in te zetten is dan jjjj mm dd. Op deze manier kan je toch sorteren.

Het * snap ik en zal dit ook zeker veranderen voor de naam van de kolomen die er nodig zijn. Het scheelt overigens maar 1 of 2 kolomen. Maar het is winst.

Wat versta je onder backticks? is dat het trimmen van dat veld waar ik om vroeg? Oke, dat los ik dan anders op.

Dus het is voor mij een keuze die ontstaan is, door de structuur die er bestaat. Op deze manier haal ik data uit een forum. Je moet dan roeien met de riemen die je hebt. Maar vind het onwjis tof dat je meedenkt... en leer er erg veel van!

Rob
Rob schreef op 13.01.2006 12:21
Wat versta je onder backticks? is dat het trimmen van dat veld waar ik om vroeg? Oke, dat los ik dan anders op.


Ik zie dat Frank offline is, dus ik ben even zo vrij ...
Backticks zijn deze dingen: `
(Vlak boven de tab-toets zit ie)

Het is een dialect van MySQL dat in andere databases niet gebruikt wordt, dus kun je ze beter niet aanleren.
backtic = ` Dat is dus wat anders dan een quote '.

Je ziet ze veel bij *uch* criminals en iedereen die 'dankzij' criminals heeft leren programmeren. Phpmyadmin heeft overigens ook de nare eigenschap om ze standaard in de queries te zetten.

Begrijpelijk dat je niet direct de hele boel gaat aanpassen, maar pas deze kennis dan toe bij zelfgemaakte scripts of uitbreidingen op bestaande scripts.

Veel succes.
Uhh...
Op die fiets.
De query wordt aangeroepen vanuit PHP. Wat ik heb gedaan is met PHPmyAdmin een query gemaakt en getest, zodat ik zeker weet dat hij door de provider goed verwerkt wordt. Hierna heb je de mogelijkheid om hier een PHP query van te maken. Zo kom ik aan die querys.
Begrijpt PHP het ook als ik deze backticks weglaat?

Reageren