Ordonner par seconde

Par Laznet, il y a 9 ans


Bonsoir,

J'aimerais organiser les posts de mon blog, (le plus récent en haut et donc les plus anciens en dessous), vu que j'ai l'intention d'en poster souvent j'ai décidé de me baser les secondes entre chaque post (car je ne peux pas faire d'order by avec ma requête).
J'utilise cette requête :

$req = $cnx->query("SELECT * FROM posts")->fetchAll();

Ma question est donc : Selon moi comme je pourrais m'y prendre pour utiliser les secondes pour organiser mes posts ?

12 réponses

Huggy, il y a 9 ans

@Carouge10 ah merde !!! en effet
du coup il ne lui reste que la solution de trier son tableau
et il vaut mieux réfléchir au type de fetch, éviter fetch_both qui complique la structure du tableau

Thomas Chicheportiche, il y a 9 ans

Salut,
Si tu ne peux pas utiliser ORDER BY, parcours tes resultats insères chacun d'eux dans un même tableau [strtotime(ma date) => mon resultat]

Carouge10, il y a 9 ans

Il indique quel erreur pour le ORDER BY ?
Du coup , vous pouvez l'utiliser comme le montre Huggy. Soit par l'id, soit par la date.

SLK, il y a 9 ans

Salut,

Ça me parait impossible sans 'ORDER BY',
pourquoi est-ce que tu ne peux pas l'utiliser ?

Carouge10, il y a 9 ans

Bonjour,

J'attends aussi de savoir la raison.
Par contre cela est possible de faire ce que tu demandes sans "order by".

On sait que quand on fait une insertion dans la BDD, celui-ci est mis en dernier. Donc ils sont trier du plus ancien au plus récent.
Il suffit, une fois les données récupérer de la BDD, d'inverser le tableau contenant les résultats afin d'avoir le bonne ordre.

Huggy, il y a 9 ans

Si on suit @slk + @Carouge10
il suffit de trier par l'id (autoincrement) en mode descendant

$req = $cnx->query("SELECT * FROM posts ORDER BY id DESC")->fetchAll();

En pratique on ne récupère jamais toute une table, on pagine par 10 ou 20 à la fois (LIMIT)

tleb, il y a 9 ans

Salut,

La solution d'un ORDER BY sur la date est bien mieux que sur l'id parce que tu ne contrôles pas l'id. Si tu veux modifier l'ordre d'apparition, tu ne peux pas.

Carouge10, il y a 9 ans

@huggy

Sauf que là, tu ne réponds pas à sa demande car il ne peut pas utiliser "order by". Pourquoi, nous ne le savons pas encore.

Laznet, il y a 9 ans

Bah "je ne peux pas", parce que j'ai fais confiance a mon IDE, celui-ci soulignait "Order by", et que ça me semblait drole d'appliquer un order by sur ce type de requête. Oui il n'y a pas de réel raison.

Huggy, il y a 9 ans

C'est quoi ton IDE ?
Il faut qu'un IDE soit très intelligent pour analyser le contenu des chaines et en déduire le langage utilisé dedans (ici SQL) et de quel SGBD il s'agit (syntaxe différente ...)

tleb, il y a 9 ans

Soit par l'id, soit par la date.

Non, par la date. Il n'y a pas de raison de le faire par l'ID. Cf mon message précédent.

keulu, il y a 9 ans

$req = $cnx->query("SELECT * FROM posts ORDER BY created DESC")->fetchAll(); me parait le mieux effectivement.

created peut etre une colonne de type "timestamp" ou encore "datetime" peut importe.