ORDER BY sur champ sérialisé

Mammouth du PHP | 1338 Messages

15 févr. 2017, 17:20

Hello,

Je stock dans un champ une valeur serializé en plusieurs langue.

Exemple :

Titre = 'a:2:{s:2:"fr";s:4:"UEFA";s:2:"en";s:4:"FAUE";}'

Je voudrais en fonction de la langue faire un ORDER BY `titre` ASC

Mais forcement il va prendre a:2 comme ordre.
Je voudrais que pour la langue FR prendre 'UE' et pour la langue EN : 'FA';

Comment faire sans creer un champ par langue ?

Merci
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8726 Messages

15 févr. 2017, 17:38

salut,

comme ça c'est pas possible, peux être avec une fonction utilisateur que tu utiliseras pour le order by (je ne sais pas si cela fonctionne).

globalement quand on met des données structurées dans une base de données c'est qu'il y a un problème.

si tu as besoin de traduction il faut une table pour cela (et nom un champ par langue).
exemple
create table language(
id_language int not null primary key,
name varchar(50) not null,
name_in_language varchar(50) not null -- je sais pas trop comment le nommer c'estle nom de la langue dans la langue english pour l'anglais etc
);
create table traduction {
id_traduction int not null primary key,
id_language int not null, -- clef étrangère vers la table language
id_text int not null, -- clef étrangère vers la table pour laquelle on a les données traduite
translated_text varchar(200) not null
);
@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 1338 Messages

15 févr. 2017, 17:41

Ouais seule solution faire le tri après en mettant comme clé de chaque entrée la valeur que l'on veut trier.
Tant pis, je pensais ca possible.
Bon sinon tu me fais un message privé et on se fait un TeamViewer