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
Ik zou graag mijn vraag nog eens willen herhalen, hoop dat dat geen probleem is.

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

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
Ja dan doe je bijv:

SELECT
veld1,
veld2,
SUBSTRING(post_subject, 11) AS korte_tekst
FROM phpbb_posts_text
WHERE post_subject LIKE "%muziek%"
ORDER BY SUBSTRING(post_subject, 11)

daarna kun je veld1, veld2 en korte_tekst ophalen met mysql_fetch_array bijvoorbeeld.
Volgens mij kun je dan ook direct sorteren op de alias:
SELECT
veld1,
veld2,
SUBSTRING(post_subject, 11) AS korte_tekst
FROM
phpbb_posts_text
WHERE
post_subject LIKE "%muziek%"
ORDER BY
korte_tekst

Dat scheelt je weer een functie en is dus een fractie sneller.
Oke...
Snaa de werking, maar in mijn geval kan ik hem niet gebruiken of ik moet mijn script totaal anders gaan maken.

Dit kan zeker niet?
SUBSTRING(post_subject, 11) AS post_subject

Wat ik er mee bedoel is, dat de waarde wel in dezelfde velden moet blijven. Maar geen nood, kan hem altijd zo trimmen met PHP.
SUBSTRING(post_subject, 11) AS post_subject
kan wel, maar is niet slim. post_subject is in dit geval namelijk niet gelijk aan post_subject. En dat is wat vreemd...

post_subject != post_subject ???

Daarom altijd een alias gebruiken die een andere naam heeft dan het origineel.

Je kunt wel beide gegevens opvragen in je query:
SELECT
veld1,
veld2,
post_subject,
SUBSTRING(post_subject, 11) AS korte_tekst
FROM
phpbb_posts_text
WHERE
post_subject LIKE "%muziek%"
ORDER BY
korte_tekst

Je krijgt dan post_subject én de korte_tekst terug van je database.
Frank schreef op 13.01.2006 12:49
Volgens mij kun je dan ook direct sorteren op de alias


Ja, dat wist ik dus niet zeker. Aliassen kun je namelijk in WHERE vaak weer niet gebruiken toch?
Klopt, in de WHERE kan het niet, maar je kunt er wel op sorteren.
Jongens... dank wederom... Ik ben er weer helemaal uit :)

Groet,
Rob

Reageren