2015-10-01 2 views
0

Im пытается совместить таблицы с LEFT JOIN и SUBSTR LOCATE. Одна из таблиц (ClientService) имеет столбец с именем description, а запись, которая мне нужна, находится между «» , например: Это тест «Пример». Мне нужен пример для сравнения с моей другой таблицей (HostingAccount)Mysql substr найти разделитель

Это вопрос, который у меня есть.

  SELECT 
      CS.ClientServiceID, 
      S.ServiceID, 
      CS.InvoicePeriod, 
      CS.Period, 
      S.Price, 
      S.ServiceCategoryID, 
      IF(LENGTH(CS.Description) > 0, CS.Description, S.Description) AS Description, 
      CS.Discount, 
      DATE_FORMAT(CS.StartDate, "%d-%m-%Y") AS StartDate, 
      '.($Timestamp === TRUE ? 'UNIX_TIMESTAMP(CS.PayedUntill)' : 'DATE_FORMAT(IFNULL(CS.PayedUntill, DATE_ADD(CS.StartDate, INTERVAL 1 YEAR)), "%d-%m-%Y")').' AS PayedUntill, 
      DATEDIFF(NOW(), CS.PayedUntill) AS PayedUntillDifference, 
      CS.ReferenceID, 
      CS.External, 
      CS.Redirect, 
      CS.RedirectType, 
      CS.Active, 
      H.HostingID, 
      H.ServerIP, 
      H.Username 
     FROM ClientService AS CS 
     JOIN Client AS C 
      ON C.ClientID = CS.ClientID 
     JOIN Service AS S 
      ON S.ServiceID = CS.ServiceID 
     LEFT JOIN Hosting AS H 
      ON H.HostingID = CS.ReferenceID 
      AND H.ClientID = C.ClientID 
     ---> LEFT JOIN HostingAccount AS HA 
      ON HA. <---- 
     WHERE CS.ClientServiceID = :CSID 
      AND C.ClientID = :CID 
      AND CS.Active IN (1,5,6,9) 

Я пометил LEFT JOIN HostingAccount с ---> < --- и имеет описание, например, в нем без «»

Этот запрос я опробованных и это дает мне запись без "" из таблицы ClientService

SELECT SUBSTR(Description, LOCATE('"',Description)+1, 
(CHAR_LENGTH(Description) - LOCATE('"',REVERSE(Description)) - 
LOCATE('"',Description))) from ClientService 

Вопрос:

Как совместить запрос SUBSTR с LEFT JOIN HostingAccount AS HA ON HA.description (без разделителя) = CS.description (между разделителем)

+0

Я отредактировал код с вопросом –

ответ

0

Я не тестировал следующее, и я не уверен на 100%, что я пошел по этому вопросу, но, думаю, вы имеете в виду что-то вроде этого?

<?php 

    $sql='SELECT 
      CS.`ClientServiceID`, 
      S.`ServiceID`, 
      CS.`InvoicePeriod`, 
      CS.`Period`, 
      S.`Price`, 
      S.`ServiceCategoryID`, 
      IF(LENGTH(CS.`Description`) > 0, CS.`Description`, S.`Description`) AS "Description", 
      CS.`Discount`, 
      DATE_FORMAT(CS.`StartDate`, "%d-%m-%Y") AS "StartDate", 
      ' .($Timestamp === TRUE ? 'UNIX_TIMESTAMP(CS.`PayedUntill`)' : 'DATE_FORMAT(IFNULL(CS.`PayedUntill`, DATE_ADD(CS.`StartDate`, INTERVAL 1 YEAR)), "%d-%m-%Y")') . ' AS "PayedUntill", 
      DATEDIFF(NOW(), CS.`PayedUntill`) AS "PayedUntillDifference", 
      CS.`ReferenceID`, 
      CS.`External`, 
      CS.`Redirect`, 
      CS.`RedirectType`, 
      CS.`Active`, 
      H.`HostingID`, 
      H.`ServerIP`, 
      H.`Username` 
     FROM `ClientService` CS 
     JOIN `Client` C ON C.ClientID = CS.ClientID 
     JOIN `Service` S ON S.ServiceID = CS.ServiceID 
     LEFT JOIN `Hosting` H ON H.HostingID = CS.ReferenceID AND H.ClientID = C.ClientID 

     LEFT JOIN `HostingAccount` HA ON HA.`description`=(
      SELECT SUBSTR(`Description`, LOCATE(\'"\', `Description`)+1, 
       (CHAR_LENGTH(`Description`) - LOCATE(\'"\',REVERSE(`Description`)) - 
       LOCATE(\'"\',Description))) 
       from `ClientService` 
     ) 

     WHERE CS.`ClientServiceID` = :CSID 
      AND C.`ClientID` = :CID 
      AND CS.`Active` IN (1,5,6,9)'; 


?> 
+0

Да, спасибо. Это было именно то, что я хотел. Так что нужно вставить код внутри левого Join –

+0

:) рад, что он помог – RamRaider

Смежные вопросы