webleads-tracker

renseignement sql pour specifique sur annuaire - RESOLU

Vincent StartUp
Avatar
Bonjour à tous,

Je travaille actuellement sur un developpement specifique sur le module annuaire.

Dans la base de données, les champs des fiches sont sérialisés dans un champ "datas" . Dans mon type de fiche il y a un champ texte "ville".
Par exemple :
a:6:{s:7:"field_1";s:5:"RENNES";s:7:"field_3";s:7:"Terrain";s:7:"field_7";s:21:"Les Maisons ...

Je voudrais faire une requete qui me ressorte toutes les villes saisies, sans doublons, une sorte de "SELECT DISTINCT ville FROM annuaire". Je ne vois pas trop comment désérialiser le champs datas directement dans la requete. En php j'y arrive mais je voudrais vraiment le faire via le sql.

Est-ce possible ? Comment ?

Vincent - StartUp Communication

Jérémie
Bonjour Vincent,

Il existe 2 possibilités :
  • Récupérer la liste de toutes les fiches et faire un traitement en PHP pour obtenir les villes
  • Faire une grosse requête SQL pour récupérer directement cette liste

Le premier cas est simple à gérer mais potentiellement coûteux en ressources.

Le second cas est la meilleure solution mais nécessite une bonne maîtrise du requêtage SQL. Tu devras par exemple dans l'ordre :
  • récupérer la position d'une séquence qui t'intéresse (par exemple : field_1")
  • Chercher la position du prochain caractère " à partir de la position obtenu ci-dessous
  • Récupérer la chaine de caractère trouvée entre la position du caractère " (+1) et la prochaine occurence de ".
Simple et efficace ;-)

Tu obtiendras par exemple une requête du genre :

SELECT
  DISTINCT(
    SUBSTRING_INDEX(
      SUBSTRING(
        datas, LOCATE('"',datas,LOCATE('field_1"',datas) + 9) + 1), '"', 1)
  ) AS ville
  FROM directory_entry


A bientôt

Jérémie

Vincent StartUp
Avatar
Super Jérémie,

Exactement ce qu'il me fallait.

Merci beaucoup.
Vincent - StartUp Communication