Les préfixes de table ne sont pas ajustés dans les clause WHERE #5112

Closed
opened 1 year ago by maieul · 10 comments
maieul commented 1 year ago
Collaborator

Soit le code suivant

$res = sql_select('spip_articles.titre, spip_rubriques.titre', 'spip_articles JOIN spip_rubriques', 'spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1')$res = sql_select('spip_articles.titre, spip_rubriques.titre', 'spip_articles JOIN spip_rubriques', 'spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1');

Sur une base de donné où le préfixe est spipq.

La requete SQL générée est la suivante

SELECT `spip_dev`.spipq_articles.titre, `spip_dev`.spipq_rubriques.titre
FROM `spip_dev`.spipq_articles JOIN `spip_dev`.spipq_rubriques
WHERE spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1

alors que cela devrait être

SELECT `spip_dev`.spipq_articles.titre, `spip_dev`.spipq_rubriques.titre
FROM `spip_dev`.spipq_articles JOIN `spip_dev`.spipq_rubriques
WHERE spipq_rubriques.id_rubrique=spipq_articles.id_rubrique AND spipq_articles.id_article=1
Soit le code suivant ```` $res = sql_select('spip_articles.titre, spip_rubriques.titre', 'spip_articles JOIN spip_rubriques', 'spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1')$res = sql_select('spip_articles.titre, spip_rubriques.titre', 'spip_articles JOIN spip_rubriques', 'spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1'); ```` Sur une base de donné où le préfixe est spipq. La requete SQL générée est la suivante ``` SELECT `spip_dev`.spipq_articles.titre, `spip_dev`.spipq_rubriques.titre FROM `spip_dev`.spipq_articles JOIN `spip_dev`.spipq_rubriques WHERE spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1 ```` alors que cela devrait être ``` SELECT `spip_dev`.spipq_articles.titre, `spip_dev`.spipq_rubriques.titre FROM `spip_dev`.spipq_articles JOIN `spip_dev`.spipq_rubriques WHERE spipq_rubriques.id_rubrique=spipq_articles.id_rubrique AND spipq_articles.id_article=1 ```
b_b added the
bug
label 1 year ago
b_b commented 1 year ago
Owner

Version cible ?

Version cible ?
maieul commented 1 year ago
Poster
Collaborator

dès que possible ? mais sinon je peux pas le régler :)

dès que possible ? mais sinon je peux pas le régler :)
b_b commented 1 year ago
Owner

Je voulais demander : sur quelle version observes-tu le bug ? ^^

Je voulais demander : sur quelle version observes-tu le bug ? ^^
maieul commented 1 year ago
Poster
Collaborator

Ah. SPIP 4.1.0 (a797bb7a4)

Ah. SPIP 4.1.0 (a797bb7a4)
b_b added this to the 4.1 milestone 1 year ago
maieul commented 1 year ago
Poster
Collaborator
Mais sans doute deja présente en 4.0.5, cf https://contrib.spip.net/Formulaire-de-participation-a-un-evenement-avec#comment510576
Owner

Alors en général si on utilise plusieurs tables, on utilise des alias

Du coup ça : 

$res = sql_select(
	'spip_articles.titre, spip_rubriques.titre', 
    'spip_articles JOIN spip_rubriques',
    'spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1'
);

Je serais tenté de l’écrire :

$res = sql_select(
    [
    	'a.titre', 
        'r.titre',
    ],
    [
    	'spip_articles as a',
        'spip_rubriques as r',
    ],
    [
    	'r.id_rubrique = a.id_rubrique',
        'a.id_article = 1'
    ]
);

Est-ce que comme cela tu as aussi le souci ?

Alors en général si on utilise plusieurs tables, on utilise des alias Du coup ça :  ```php $res = sql_select( 'spip_articles.titre, spip_rubriques.titre', 'spip_articles JOIN spip_rubriques', 'spip_rubriques.id_rubrique=spip_articles.id_rubrique AND spip_articles.id_article=1' ); ``` Je serais tenté de l’écrire : ```php $res = sql_select( [ 'a.titre', 'r.titre', ], [ 'spip_articles as a', 'spip_rubriques as r', ], [ 'r.id_rubrique = a.id_rubrique', 'a.id_article = 1' ] ); ``` Est-ce que comme cela tu as aussi le souci ?
maieul commented 1 year ago
Poster
Collaborator

Ca marche !

J'avoue que j'avais totalement oublié ET la possibilité de tableau pour les différents paramètres (surtout que programmer.spip.net l'utilise assez peu dans les exemples) ET les alias.

Ca marche ! J'avoue que j'avais totalement oublié ET la possibilité de tableau pour les différents paramètres (surtout que programmer.spip.net l'utilise assez peu dans les exemples) ET les alias.
JLuc commented 1 year ago
J'ai complété la doc https://programmer.spip.net/Elements-communs
b_b commented 1 year ago
Owner

C'était donc un manque de doc qui a été corrigé depuis ? On peut modifier les tags du ticket et le fermer ?

C'était donc un manque de doc qui a été corrigé depuis ? On peut modifier les tags du ticket et le fermer ?
maieul commented 1 year ago
Poster
Collaborator

Je pense oui. Avec cette doc, on n'a plus besoin de complexifier encore le compilo.

Je pense oui. Avec cette doc, on n'a plus besoin de complexifier encore le compilo.
maieul closed this issue 1 year ago
Sign in to join this conversation.
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: spip/spip#5112
Loading…
There is no content yet.