[spip-dev] Boucle (Syndic_articles) : pb d'autojointure avec titre_mot ?

S'lt

Je viens de tester cette boucle :
<BOUCLE_cmi_art(SYNDIC_ARTICLES) {tout} {titre_mot=CMI} {par date}
{inverse}{pagination 6}>

La requete sql resultante est :

SELECT syndic_articles.id_syndic_article, syndic_articles.date,
syndic_articles.url, syndic_articles.titre, L1.url_site, L1.nom_site
  FROM spip_syndic_articles AS `syndic_articles` INNER JOIN
spip_syndic AS L1 ON ( L1.id_syndic = syndic_articles.id_syndic )
INNER JOIN spip_mots AS L2 ON ( L2.url_propre = L1.url_propre ) INNER
JOIN spip_mots AS L3 ON ( L3.id_mot = L2.id_mot )
  WHERE (syndic_articles.statut = 'publie')
      AND (L3.titre = 'CMI')
      AND (L1.statut = 'publie')
  GROUP BY syndic_articles.id_syndic_article
  ORDER BY syndic_articles.date DESC

Le resultat n'est pas bon. J'obtiens des articles syndiqués de site
n'ayant pas le mot clef 'CMI'.

Je pense que c'est du à la jointure L2.url_propre = L1.url_propre

Bien que j'ai activé les url_propre sur le site, spip_mots.url_propre est vide.

De plus je trouve bizarre qu'on jointure sur ce champ.

SPIP 1.9.3 dev SVN [11665]

Km

Km

S'lt

Je viens de tester cette boucle :
<BOUCLE_cmi_art(SYNDIC_ARTICLES) {tout} {titre_mot=CMI} {par date}
{inverse}{pagination 6}>

La requete sql resultante est :

SELECT syndic_articles.id_syndic_article, syndic_articles.date,
syndic_articles.url, syndic_articles.titre, L1.url_site, L1.nom_site
  FROM spip_syndic_articles AS `syndic_articles` INNER JOIN
spip_syndic AS L1 ON ( L1.id_syndic = syndic_articles.id_syndic )
INNER JOIN spip_mots AS L2 ON ( L2.url_propre = L1.url_propre )

...

Je pense que c'est du à la jointure L2.url_propre = L1.url_propre

Bien que j'ai activé les url_propre sur le site, spip_mots.url_propre est vide.

de quelle version de SPIP s'agit-il ?
Tous les champs url_propre ont été retirés des tables standards lorsque SPIP est passé multi-serveur SQL.

Committo,Ergo:Sum

S'lt

de quelle version de SPIP s'agit-il ?

Comme je le disais dans mon mail, j'etais en SPIP 1.9.3 dev SVN [11665]

Tous les champs url_propre ont été retirés des tables standards lorsque
SPIP est passé multi-serveur SQL.

Donc il y a eu une mise à jour SVN qui n'a pas fait la transition.
Comment je fais pour rerouler les mise à jour coté db ?

Je ne sais pas si ça joue, j'utilise $type_urls = "propres";

Km

de quelle version de SPIP s'agit-il ?

Comme je le disais dans mon mail, j'etais en SPIP 1.9.3 dev SVN [11665]

oui ma formulation était ambigue, je voulais dire que c'est une version qui n'est pas conforme.

Tous les champs url_propre ont été retirés des tables standards lorsque
SPIP est passé multi-serveur SQL.

Donc il y a eu une mise à jour SVN qui n'a pas fait la transition.
Comment je fais pour rerouler les mise à jour coté db ?

il faudrait regarder le fichier maj.log pour savoir ce qu'il s'est passé,
il n'y a peut-etre pas que ça.

Je ne sais pas si ça joue, j'utilise $type_urls = "propres";

non

Committo,Ergo:Sum

Un bug référencé et corrigé affectait les mises a jour : une partie des mises a jour était sautée après reprise sur timeout (ie toute la série des 1.9xx était interrompue pour continuer directement sur la série des 10000)
Le mieux est de remettre 1.931 dans la meta version_base, de supprimer tmp/meta_cache.txt et relancer la maj
Cédric

S'lt

Avec la solution de Cedric cela remis d'aplomb la base.

Toutefois si je fais la boucle indiquée, je n'obtiens plus de
résultat. La requete est :

SELECT syndic_articles.date, syndic_articles.id_syndic_article,
syndic_articles.url, syndic_articles.titre, L1.url_site, L1.nom_site
  FROM spip_syndic_articles AS `syndic_articles` INNER JOIN
spip_syndic AS L1 ON ( L1.id_syndic = syndic_articles.id_syndic )
INNER JOIN spip_mots AS L2 ON ( L2.maj = L1.maj ) INNER JOIN spip_mots
AS L3 ON ( L3.id_mot = L2.id_mot )
  WHERE (syndic_articles.statut = 'publie')
      AND (L3.titre = '')
      AND (L1.statut = 'publie')
  GROUP BY syndic_articles.id_syndic_article
  ORDER BY syndic_articles.date DESC

Tandis que si je met id_mot comme critere, j'ai bien les resultat voulu.

La boucle :
<BOUCLE_cmi_art(SYNDIC_ARTICLES) {tout} {id_mot=354} {par date}
{inverse}{pagination 6}>

La requete générée :

SELECT syndic_articles.date, syndic_articles.id_syndic_article,
syndic_articles.url, syndic_articles.titre, L2.url_site, L2.nom_site
  FROM spip_syndic_articles AS `syndic_articles` INNER JOIN
spip_syndic AS L2 ON ( L2.id_syndic = syndic_articles.id_syndic )
INNER JOIN spip_mots_syndic AS L1 ON ( L1.id_syndic =
syndic_articles.id_syndic )
  WHERE (syndic_articles.statut = 'publie')
      AND (L1.id_mot = 354)
      AND (L2.statut = 'publie')
  GROUP BY syndic_articles.id_syndic_article
  ORDER BY syndic_articles.date DESC

Le probléme de jointure doit etre lié à ( L2.maj = L1.maj )

Km