Php Mysql子字符串定位分隔符
我正在尝试使用左连接和SUBSTR定位组合表。其中一个表(ClientService)有一个名为description的列,我需要的记录介于“”之间 例如:这是一个测试“示例”。我需要示例与我的其他表(HostingAccount)进行比较 这就是我的疑问Php Mysql子字符串定位分隔符,php,mysql,Php,Mysql,我正在尝试使用左连接和SUBSTR定位组合表。其中一个表(ClientService)有一个名为description的列,我需要的记录介于“”之间 例如:这是一个测试“示例”。我需要示例与我的其他表(HostingAccount)进行比较 这就是我的疑问 SELECT CS.ClientServiceID, S.ServiceID, CS.InvoicePeriod, CS.
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)
问题:
如何将SUBSTR查询与左JOIN HostingAccount合并为HA
关于HA.description(不带分隔符)=CS.description(在分隔符之间)我没有测试以下内容,我不能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)';
?>
我用一个问题编辑了代码是的,谢谢。这正是我想要的。因此,需要将代码粘贴到左连接中
<?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)';
?>