Page 1 sur 1

Dedoublonnage d'un tableau tiré d'une BDD puis UPDATE

Posté : 27 mai 2009, 23:12
par gandolfi
salut,

je cherche a recuperer des donnees d'une bdd sql pour les trier et faire un update final de ce que j'ai trié. C'est pour poster 15 post par jour sur un blog (dratf => publish) mais en ayant au max un post par auteur dans une categorie pour eviter qu'un auteur ai 2 articles d'affilé le meme jour dans la meme categorie.

En clair dans ma BDD : Table = wp_posts, champ: post_status, post_author, post_category,post_date.

Le but est d'extraire tous les posts ayant le status draft et de les classer par date

Code : Tout sélectionner

$result = "SELECT id,post_author,post_category,post_date,post_date_gmt FROM wp_posts WHERE post_status = 'draft' ORDER BY post_date ASC";
Puis de les mettre dans un tableau

Code : Tout sélectionner

if (mysql_num_rows($result)) { $data = mysql_fetch_array($result); ...
Ensuite je voudrais trier ce tableau pour ne garder que les 15 posts du plus ancien au plus recent etant d'auteur different pour une meme categorie. Les posts du meme auteur dans la meme categorie qui auront ete mis de coté seront ensuite à nouveau examiné le lendemain.
Il faudrait enfin que je fasse un update des posts dans la BDD avec une boucle je pense.

L'embetant c'est que je ne sais pas comment m'y prendre et par ou commencer. Au départ je voulais essayer de tout faire en sql mais je ne suis pas assez bon pour cela. J'ai donc essayé de m'aider du PHP.

merci pour votre aide.

Posté : 27 mai 2009, 23:32
par thehawk
Je serais tenter de t'orrienter vers :
en sql : DISTINCT http://sql.1keydata.com/fr/sql-distinct.php
en php: array_unique()

Bonne chance Hawk

Posté : 28 mai 2009, 07:27
par Invité
Le soucis c'est que je trie selon 2 criteres dans le tableau (array_unique et distinct ne trie que selon un critere)
- auteur deja present dans la categorie n°x

En fait au debut je voulais trier les post en mettant comme condition si l'auteur n'existe pas -> enregistrer les posts retenus dans un tableau.

mais si l'auteur existe alors verifier dans le tableau precedent s'il existe pour la categorie actuelle.
Si non alors on enregistre dans le tableau precedent.

Mais je ne sais pas si c'est une bonne solution et ne sais pas trop comment la mettre en oeuvre.

Merci

Posté : 28 mai 2009, 16:53
par dunbar
Salut,
Ton champs post_date est de quel type dans ta table :?:

Posté : 28 mai 2009, 18:42
par gandolfi
il est du type datetime, est ce important ?

Posté : 28 mai 2009, 19:21
par dunbar
il est du type datetime, est ce important ?
Je ne suis pas certain d'avoir compris, mais que donne cette requete
SELECT DISTINCT(post_author),id, post_category, post_date, post_date_gmt FROM wp_posts
            WHERE post_status = 'draft'
            ORDER BY post_date
            DESC LIMIT 0 , 15
Ici on selectionne par autheur, qui possede status à draft et on ne prend que les 15 dernier enregistrements :?:

Posté : 28 mai 2009, 19:40
par gandolfi
Cela m'affiche les 7 posts "draft" existants par date mais ne tient pas compte qu'il y a plusieurs posts du meme auteur dans une meme categorie.

Posté : 28 mai 2009, 19:45
par dunbar
Cela m'affiche les 7 posts "draft" existants par date mais ne tient pas compte qu'il y a plusieurs posts du meme auteur dans une meme categorie.
SELECT DISTINCT(post_category),id, post_category, post_date, post_date_gmt FROM wp_posts
            WHERE post_status = 'draft'
GROUP BY post_auteur            
ORDER BY post_date
            DESC LIMIT 0 , 15
Ceci peut-être alors :?:

Posté : 28 mai 2009, 20:03
par gandolfi
cela affiche 2 auteurs different dans la meme categorie mais me zappe un des 2 auteurs qui a ecrit un autre article dans une seconde categorie.

Posté : 28 mai 2009, 20:05
par dunbar
Supprime le distinct alors
DISTINCT(post_category),
Enfin tu a l'idée, essaye d'autre combi

Posté : 30 mai 2009, 12:21
par gandolfi
je n'y arrive pas uniquement avec du SQL.
C'est pour cela que je suis parti sur du php avec tri par tableau