Door
Rob
op 13-01-2006 09:26
gewijzigd op 13-01-2006 09:53
716 views
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.
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.
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.
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.