Wellicht dat een modje even naar een betere topic titel wil zoeken
. Maar weer eens een bijdrage van mij
.
Dit keer met een vraag + oplossing (nieuw!), wellicht dat andere users hier nog wel eens tegenaan lopen.
Het probleem :
So far, so good. Echter er is nu een probleem. Ik wil nog een veld, namelijk TOPIC_LOCKED ook sorteren, maar dan onderaan.
Als je dat in je SQL erbij gooit krijg je een hele rare resultset die verre van geordend is ( topics vallen er ineens uit etc ) . Dit komt door de combinatie van limit en het sorteren op 3 velden waarbij de een bovenaan moet uitkomen en de andere onderaan moet uitkomenm, terwijl tegelijkertijd de locked en sticky niet op datum gesorteerd moeten worden, maar de open wel. Dat lukt dus niet.
Mijn array ziet er grofweg gezien zo uit :
-- oplossing --
Ik heb een hele tijd gekeken naar usort, uasort, array_multisort. Maar of ze gaven problemen met multi dimensionale arrays, of met het 'user-defined' sorteren van 3 velden ( hoop gekloot ) .
Om dit probleem te fixen kan het echter ook vele malen korter :
Hij duwt dus elke locked naar het einde en gooit deze in het midden eruit . Zo lukt het dus wel, en veel simpeler dan je in menige search zal vinden
-- wat moet je hiermee
--
Ik wil graag commentaar op gebruikte methode en mochten de gemene modjes (
) je in de toekomst weer naar de search verwijzen voor zoiets, dan kan je nog altijd aan deze methode denken
Dit keer met een vraag + oplossing (nieuw!), wellicht dat andere users hier nog wel eens tegenaan lopen.
Het probleem :
PHP:
1
2
3
4
5
6
7
| $sql = "SELECT TOPIC_ID, TOPIC_NAME, TOPIC_USER, TOPIC_LOCKED,TOPIC_STICKY, TOPIC_LASTPOSTDATE, TOPIC_MESSAGECOUNT, TOPIC_FORUM FROM TBL_TOPIC WHERE TOPIC_FORUM = $forum_id ORDER BY TOPIC_STICKY DESC, TOPIC_LASTPOSTDATE DESC LIMIT $limit |
So far, so good. Echter er is nu een probleem. Ik wil nog een veld, namelijk TOPIC_LOCKED ook sorteren, maar dan onderaan.
Als je dat in je SQL erbij gooit krijg je een hele rare resultset die verre van geordend is ( topics vallen er ineens uit etc ) . Dit komt door de combinatie van limit en het sorteren op 3 velden waarbij de een bovenaan moet uitkomen en de andere onderaan moet uitkomenm, terwijl tegelijkertijd de locked en sticky niet op datum gesorteerd moeten worden, maar de open wel. Dat lukt dus niet.
Mijn array ziet er grofweg gezien zo uit :
code:
1
| $topics[row][veldnaam] |
-- oplossing --
Ik heb een hele tijd gekeken naar usort, uasort, array_multisort. Maar of ze gaven problemen met multi dimensionale arrays, of met het 'user-defined' sorteren van 3 velden ( hoop gekloot ) .
Om dit probleem te fixen kan het echter ook vele malen korter :
PHP:
1
2
3
4
5
6
| foreach ($topics as $key => $tpc) { if ($tpc["TOPIC_LOCKED"] == 1) { array_push($topics,$tpc); unset($topics[$key]); } } |
Hij duwt dus elke locked naar het einde en gooit deze in het midden eruit . Zo lukt het dus wel, en veel simpeler dan je in menige search zal vinden
-- wat moet je hiermee
Ik wil graag commentaar op gebruikte methode en mochten de gemene modjes (
Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.