Je tente de créer des données d'adresse à partir d'un certain nombre de tables différentes et d'obtenir deux jeux de données renvoyés à l'aide d'une requête UNION pour supprimer les doublons. Je construis l'instruction SQL suivante en PHPUtilisation de IF imbriqué dans une instruction mySQL SELECT
$query = "
SELECT
l.UPRN,
(CONCAT(IF(o.ORGANISATION IS NULL, '', CONCAT(o.ORGANISATION, ' ')),
IF(l.SAO_TEXT IS NULL, '', CONCAT(l.SAO_TEXT, ' ')),
IF(l.SAO_START_NUMBER <> 0, SAO_START_NUMBER, ''),
IF(l.SAO_START_SUFFIX IS NULL, '', SAO_START_SUFFIX),
IF(l.SAO_END_NUMBER <> 0, CONCAT('-', SAO_END_NUMBER), ''),
IF(l.SAO_END_SUFFIX IS NULL, '', l.SAO_END_SUFFIX),
IF(l.PAO_TEXT IS NULL, '', CONCAT(' ', l.PAO_TEXT, ' ')),
IF(l.PAO_START_NUMBER <> 0, PAO_START_NUMBER, ''),
IF(l.PAO_START_SUFFIX IS NULL, '', PAO_START_SUFFIX),
IF(l.PAO_END_NUMBER <> 0, CONCAT('-', PAO_END_NUMBER), ''),
IF(l.PAO_END_SUFFIX IS NULL, '', l.PAO_END_SUFFIX),
IF(s.STREET_DESCRIPTION IS NULL, '',
CONCAT(' ', s.STREET_DESCRIPTION, ' ')),
IF(s.LOCALITY_NAME IS NULL, '', CONCAT(s.LOCALITY_NAME, ' ')),
IF(s.TOWN_NAME IS NULL, '', CONCAT(s.TOWN_NAME, ' ')),
IF(s.ADMINISTRATIVE_AREA IS NULL, '',
CONCAT(s.ADMINISTRATIVE_AREA, ' ')),
b.postcode_locator)
) AS single_address_label
FROM addbaseprem.abp_lpi l
INNER JOIN addbaseprem.abp_blpu b
ON b.UPRN = l.UPRN
INNER JOIN addbaseprem.abp_street_descriptor s
ON s.USRN = l.USRN
LEFT JOIN addbaseprem.abp_organisation o
ON o.UPRN = l.UPRN
WHERE l.LOGICAL_STATUS = 1
";
Il fonctionne assez bien dans ce que je reçois mon UPRN et colonnes single_address_label retourné. Je vais avoir un problème avec la partie suivante si
IF(s.ADMINISTRATIVE_AREA IS NULL,'',CONCAT(s.ADMINISTRATIVE_AREA,' ')),
Ce que je voudrais arriver est de ne pas concat la valeur ADMINISTRATIVE_AREA si elle est la même que la valeur de TOWN_NAME par exemple, je voudrais quelque chose comme
IF(s.ADMINISTRATIVE_AREA IS NULL,'',IF((s.ADMINISTRATIVE_AREA == s.TOWN_NAME),'',CONCAT(s.ADMINISTRATIVE_AREA,' ')),
J'ai essayé quelques variantes de OR! = Et ainsi de suite mais en vain - je n'arrive pas à trouver le bon code et je continue à avoir une erreur de syntaxe. Je ne sais pas si j'essaie de faire quelque chose qui n'est tout simplement pas possible ou de commettre une erreur d'écolier. Il a fallu du temps pour arriver jusque là ...
Toute aide ou conseil reçu avec gratitude.
merci. fonctionne bien. ne peux pas comprendre comment je ne pouvais pas voir cela hier soir – user1576265