Page 1 sur 1

UPDATE avec utilisation de distinct

Posté : 15 mai 2009, 20:30
par gandolfi
Salut,

je cherche a updater un champ par ordre chronologique avec la condition que le post_author soit different pour eviter les doublons.

J'ai essayé cette commande mais il me retourne une erreur SQL.

create table

Code : Tout sélectionner

UPDATE wp_posts SET post_status = 'publish' WHERE post_status = 'draft' and post_author IN (SELECT DISTINCT post_author FROM 'wp_posts') ORDER BY 'post_date' ASC LIMIT 2
Merci pour votre aide

Posté : 17 mai 2009, 18:47
par sadeq
rien compris car ce que tu dis n'est pas logique. Essaye de reformuler par un exemple.

Posté : 17 mai 2009, 20:49
par gandolfi
J'ai mis le nom de la table : "wp_posts"
cette table contient les champs : "post_author", "post_status" et "post_category"

- Je veux édité 15 articles/jours d'auteurs differents en les passant de "post_status = draft" à "post_status = publish"
- Par contre je veux faire en sorte que si l'auteur repertorié dans "post_author" est present plus d'une fois pour la meme categorie, le champ soit sauté et passe au prochain article avec un auteur different.

C'est à dire que je peux poster plusieurs articles du meme auteur à partir du moment ou ceux-ci sont dans des categories differentes.

Merci

Posté : 18 mai 2009, 10:09
par GiorgioLino
@gandolfi

très souvent, quand il s'agit de programmation, une partie de la solution se trouve dans le message d'erreur.

Alors je te conseille d'éditer le message d'erreur que tu reçois si tu veux aider les forumistes...à t'aider.


Bon codage.

Posté : 18 mai 2009, 10:38
par GiorgioLino
En attendant de lire ton message d'erreur, quelques pistes à explorer pour toi :

1) Utilisation des simples quotes dans ta requête :

ws_post est une table, donc elle sont inutiles

SELECT DISTINCT post_author FROM 'wp_posts'

Idem pour post_date qui est un champ cette fois-ci.

ORDER BY 'post_date'



2) Conformité de la requête par rapport au résultat attendu:

UPDATE wp_posts
SET post_status = 'publish'
WHERE post_status = 'draft'
jusqu'ici c'est bon


and post_author IN
(SELECT DISTINCT post_author FROM 'wp_posts')

ici ta condition équivaut simplement à "post_author existe" ou "post_author a posté au moins une fois", ce qui n'est pas exactement ce que tu voudrais faire ;
tu voudrais qu'il ait posté dans au moins deux catégories différentes.



ORDER BY 'post_date'
ASC LIMIT 2

une clause ORDER BY s'applique nécessairement à une clause SELECT. Or ici elle s'applique au UPDATE (puisqu'elle est hors de la parenthèse) ce qui n'a pas de sens.
A modifier donc.



Ces quelques indications devraient t'aider à résoudre ton problème si ce n'est pas déjà fait.

Posté : 18 mai 2009, 18:01
par gandolfi
en cherchant un peu sur internet j'ai récupéré cette fonction qui marche.

Code : Tout sélectionner

UPDATE wp_posts P1 SET post_status = 'publish' WHERE P1.post_status = 'draft' AND NOT EXISTS( SELECT p2.* FROM (SELECT post_author,post_date FROM wp_posts p3 WHERE p3.post_status = 'draft' ) P2 WHERE p2.post_author=P1.post_author AND P2.post_date<P1.post_date )
Mais elle s'arrete dès que l'auteur est en double et je n'ai pas reussi a integrer le fait de pouvoir valider le meme auteur si les articles sont dans des categories differentes.