8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'avais initialement une requête du genre :

SELECT * FROM themes WHERE themeID IN (SELECT theme FROM actus WHERE maCondition)


Mais une mise à jour du site a fait que le champ theme de la table actus n'est plus simplement un entier mais une concaténation d'entiers (sous la forme theme1,theme2,theme3) autrement dit qu'une actu peut répondre à plusieurs thématiques (exemple : emploi, événement)

J'ai donc pensé à modifier ma requête avec FIND_IN_SET(themeID, SELECT ...) mais cela ne fonctionne pas car le SELECT retourne non pas une chaine de valeurs séparées par des virgules mais des rows de résultats.

Comment dois-je procéder ?

D'avance merci pour votre aide car l'amateur que je suis est un peu beaucoup perdu.
Salut,

a mon avis le plus simple doit être de recrée une table (une vue) qui associe les ids des actus avec les id des thèmes.

En cherchant un peu je suis tombé sur ce lien : https://stackoverflow.com/questions/74347331/how-to-convert-comma-separated-string-value-into-rows-in-mysql

Et en adaptant un peu à ton cas ça revient à ça en gros : https://dbfiddle.uk/cqpZIY8q


  Create view actus_theme as 
  SELECT actus.id actusid, jsontable.theme themeid
  FROM actus
  CROSS JOIN JSON_TABLE(CONCAT('["', REPLACE(theme, ',', '","'), '"]'),
                      '$[*]' COLUMNS (theme TEXT PATH '$')) jsontable;
Modérateur
Salut,

Mathieuu a écrit :


a mon avis le plus simple doit être de recrée une table (une vue) qui associe les ids des actus avec les id des thèmes.


oui (la vue, je ne la vois pas). Mais l'idée est là. Voir une table avec theme1, theme2, theme3 ça présage rien de bon. ça présage des pertes de perfs pour rien.
niuxe a écrit :
oui (la vue, je ne la vois pas). Mais l'idée est là.


Hum je n'ai pas compris Smiley hum . C'est le 3e bloc dans le lien vers le fiddle, ou le bout de code dans le bloc de code
Modérateur
Mathieuu a écrit :


Hum je n'ai pas compris Smiley hum . C'est le 3e bloc dans le lien vers le fiddle, ou le bout de code dans le bloc de code


Je n'avais pas fait attention au lien fiddle.