Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1626 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Une requête qui n'est pas tout à fait correcte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Une requête qui n'est pas tout à fait correcte

n°1856022
macelfresh
Posté le 27-02-2009 à 15:06:03  profilanswer
 

Bonjour,
 
J'espère pouvoir trouver une solution à ce problème qui m'empoisonne pas mal l'existence ces jours derniers. Je suis pas vraiment ce qu'on peut appeler un codeur, même si j'ai un DUT SRC, ca fait bien longtemps que j'ai arrété de faire du dev web pur et dur. Je me débrouille avec ce que je sais faire, mais parfois il m'arrive (comme là), de n'avoir aucune idée sur ce que je devrais faire pour obtenir ce que je veux. En vrai, j'ai pas du créer une requête SQL depuis facilement 4 ans.
 
Donc voilà, sous wordpress, on a une fonction qui s'appelle previous_post_link (pareil avec next), qui en théorie permet d'exclure un certain nombre de catégories, qui fait que la navigation ne s'opère qu'au sein d'une seule catégorie, ce qui est par ailleurs exactement ce dont j'ai besoin.
 
Or voilà, il semblerait que ca ne marche pas. Disons que si j'ai deux catégories, chien et chat, et que je veux naviguer uniquement dans chat, ben le filtre "vire-moi-les-chiens" ne fonctionne pas. Car le post suivant ou précédent apparait quand meme comme être un chien. Enfoiré!
 
 
J'ai cherché sur les forums wordpress, aucune réponse consistante n'a pu venir me sauver, donc j'ai décidé d'y aller à bras-le-corps, et d'aller moi-même farfouiller dans les requêtes sql.
 
Donc voici la requête effectuée par wp pour savoir quel est le post suivant à afficher (pour en créer un lien, enfin je laisse wordpress faire son travail, le problème étant surtout qu'il me retourne des posts de mauvaise catégorie):
 

Code :
  1. SELECT p.* FROM `wpmod_posts` AS p INNER JOIN wpmod_term_relationships AS tr ON p.ID = tr.object_id INNER JOIN
  2. wpmod_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE p.post_date < '2009-02-24 15:44:17'
  3. AND p.post_type = 'post' AND p.post_status = 'publish' AND tt.taxonomy = 'category' AND tt.term_id NOT IN (5) ORDER
  4. BY p.post_date DESC LIMIT 1


où NOT IN (5) est censé opérer le filtre.
 
Maintenant je l'ai retournée dans tous les sens, en remplacant par !=, en mettant IN, ou = en changeant la catégorie (5 ou 6), en l'enlevant, et à chaque fois il me retourne le même post.  
 
Donc, mes capacités d'analyse m'ont permis d'en conclure que cette condition ne sert absolument à rien dans la requête. Maintenant j'aimerais savoir s'il y a un moyen d'arriver à faire marcher ce filtre, dont j'ai désespérément besoin, pour lequel j'ai essayé plusieurs méthodes et sur lequel je viens de passer plusieurs heures (au moins depuis hier apm), et si oui, est ce que vous pourriez m'aider à l'atteindre?
 
Merci beaucoup
 
pour la structure de la db, on une dizaine de table, mais les trois utilisées ici sont correctes il me semble:
 
Post, contient tous les posts, relationship est la relation entre les post et les catégories:
 
http://www.kabouing.com/fresh_pas_acces_free/term_relationship.GIF
 
 
 
et term_taxonomy ressemble à cela:
 
http://www.kabouing.com/fresh_pas_acces_free/termm_taxonomy.GIF
 
Merci pour votre aide!

mood
Publicité
Posté le 27-02-2009 à 15:06:03  profilanswer
 

n°1856070
MagicBuzz
Posté le 27-02-2009 à 16:45:31  profilanswer
 

De ce que je comprends, ton post "3" est attaché aux catégories 3 et 6 en même temps, c'est bien ça ?
 
Si oui, déjà, est-ce normal ?
 
Ensuite, pour que la requête ne retourne des post que pour la categorie 3 par exemple, voici ce que je tenterais :
 

Code :
  1. SELECT p.* FROM wpmod_posts p
  2. INNER JOIN wpmod_term_relationships tr ON p.ID = tr.object_id
  3. INNER JOIN wpmod_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
  4. WHERE p.post_date < '2009-02-24 15:44:17'
  5. AND p.post_type = 'post'
  6. AND p.post_status = 'publish'
  7. AND tt.taxonomy = 'category'
  8. AND tt.term_id NOT IN (SELECT tt2.term_id FROM wpmod_term_taxonomy tt2
  9. INNER JOIN wpmod_term_relationships tr2 ON tr2.term_taxonomy_id = tt2.term_taxonomy_id AND tr2.obect_id = tr.object_id
  10. WHERE tt2.taxonomy = tt.taxonomy AND tt2.term_id != 3)
  11. ORDER BY p.post_date DESC LIMIT 1

n°1856071
MagicBuzz
Posté le 27-02-2009 à 16:46:19  profilanswer
 

(à la base, il s'agit de sélectionner les lignes pour lesquelles on ne trouve pas de relation de catégorie différente de cette dans laquelle on est, si c'est bien ça que tu veux)

n°1856670
macelfresh
Posté le 02-03-2009 à 11:01:48  profilanswer
 

en fait la catégorie 3 est la catégorie parent des catégories 5 et 6.

 

Ce que j'aimerais, c'est que quand on clique sur un élément de la catégorie 5, ou 6, on ait la possibilité de naviguer entre les différents de la même catégorie (5 ou 6) uniquement.

 

Je vais tester ton code.


Message édité par macelfresh le 02-03-2009 à 11:03:12
n°1856697
macelfresh
Posté le 02-03-2009 à 12:21:00  profilanswer
 

on m'a proposé cette solution sur un autre forum qui a l'air de bien fonctionner.
 
C'est surtout une histoire de inner join et de where mal placé a priori
 

Code :
  1. SELECT p.* FROM `wpmod_posts` AS p INNER JOIN wpmod_term_relationships AS tr ON p.ID = tr.object_id INNER JOIN
  2. wpmod_term_taxonomy AS tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.term_id NOT IN (5)) WHERE p.post_date < '2009-02-24 15:44:17'
  3. AND p.post_type = 'post' AND p.post_status = 'publish' AND tt.taxonomy = 'category' ORDER
  4. BY p.post_date DESC LIMIT 1;


 
Maintenant il faut que j'arrive à mettre en place le code qui génére cette requête :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Une requête qui n'est pas tout à fait correcte

 

Sujets relatifs
Défilement images d'une requete php avec javascript[ACCESS]Difficulté d'execution d'une requete SQL
[RESOLU] [PHP/MYSQL] Problème d'exécution de requete imbriquéoptim requete
[MySQL] Requête un peu spéciale...nombre d'occurrences de champs sur requete croisée
problème requete sql sous oracleoracle
[Résolu] Ecriture correcte de requête[SQL] Requête toute simple.... mais est elle correcte ?
Plus de sujets relatifs à : Une requête qui n'est pas tout à fait correcte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR