현재 각 행에 대해 2 개의 테이블, 사용자 및 클라이언트에서 데이터를 검색하는 루프가 있습니다. 그래서 쿼리가 쌓이고 있습니다.mysql join 쿼리가 올바른 값을 반환하지 않음
첫째로, 이것은 나쁜 것입니까? 페이지 당 20 개의 행을 표시하려고하므로 현재 약 45 개의 쿼리가 사용됩니다. 여기
내가 단지 2 행 표시하고있어 쿼리의 목록입니다 : 이데이터베이스 쿼리를
#1
SELECT CID FROM users WHERE Hash = :Hash LIMIT 1;
#2
SELECT start_time,finish_time,dinner_time FROM company WHERE CID = :CID LIMIT 1;
#3
SELECT CID,Access,Hash FROM users WHERE CID = :CID LIMIT 1;
#4
SELECT count(*) FROM jobs WHERE CID = :CID AND (( Status="1") OR (Status="2")) AND SUBSTRING(LOWER(`SiteName`), 1, 1) REGEXP '[[:digit:]]';
#5
SELECT * FROM jobs WHERE CID = :CID AND ( (Status="1") OR (Status="2")) AND SUBSTRING(LOWER(`SiteName`), 1, 1) REGEXP '[[:digit:]]' ORDER BY JID DESC LIMIT 20;
#6
SELECT UID,FirstName,LastName FROM users WHERE CID = :CID AND UID = :UID LIMIT 1;
#7
SELECT ClientID,Name FROM clients WHERE CID = :CID AND ClientID = :ClientID LIMIT 1;
#8
SELECT UID,FirstName,LastName FROM users WHERE CID = :CID AND UID = :UID LIMIT 1;
#9
SELECT ClientID,Name FROM clients WHERE CID = :CID AND ClientID = :ClientID LIMIT 1;
#10
SELECT UID,FirstName,LastName FROM users WHERE CID = :CID AND UID = :UID LIMIT 1;
내가 하나 개의 쿼리로 사용자와 클라이언트에 합류 생각하고 있어요 (6 ~ 7 위의 목록)에서
SELECT u.UID, u.FirstName, u.LastName, c.ClientID, c.Name FROM users u INNER JOIN clients c WHERE u.CID = :CID AND c.CID = :CID2 AND u.UID = :UID AND c.ClientID = :ClientID
이 반환되는 것입니다 :
,716,173Array
(
[UID] => 1
[FirstName] => John
[LastName] => Smith
[ClientID] => 1
[Name] => Client Name
)
누구든지 내가 잘못 갈거야 어디 있는지 : (210) 내가 기다리고 있었다
처럼 반환하는 것입니다 ?
업데이트
고객 테이블
CREATE TABLE IF NOT EXISTS `clients` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CID` int(11) NOT NULL,
`ClientID` int(11) DEFAULT NULL,
`Name` varchar(100) NOT NULL,
`Clientcontact` varchar(100) NOT NULL,
`Prefix` varchar(20) NOT NULL,
`Email` varchar(50) NOT NULL,
`Phone` varchar(12) NOT NULL,
`Fax` varchar(12) NOT NULL,
`Address1` varchar(100) NOT NULL,
`Address2` varchar(100) NOT NULL,
`Address3` varchar(100) NOT NULL,
`County` varchar(100) NOT NULL,
`Post` varchar(100) NOT NULL,
`Invoicecontact` varchar(100) NOT NULL,
`Invoiceemail` varchar(50) NOT NULL,
`Invoiceaddress1` varchar(100) NOT NULL,
`Invoiceaddress2` varchar(100) NOT NULL,
`Invoiceaddress3` varchar(100) NOT NULL,
`Invoicecounty` varchar(100) NOT NULL,
`Invoicepost` varchar(100) NOT NULL,
`Dateadded` int(10) NOT NULL,
`vat` tinyint(1) DEFAULT NULL,
`vatnumber` int(14) DEFAULT NULL,
`Status` tinyint(1) NOT NULL,
PRIMARY KEY (`ID`)
)
사용자 테이블
CREATE TABLE IF NOT EXISTS `users` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CID` int(11) DEFAULT NULL,
`UID` int(11) DEFAULT NULL,
`FirstName` varchar(25) DEFAULT NULL,
`LastName` varchar(25) DEFAULT NULL,
`dob1` varchar(2) DEFAULT NULL,
`dob2` varchar(2) DEFAULT NULL,
`dob3` varchar(4) DEFAULT NULL,
`Email` varchar(50) DEFAULT NULL,
`password_hash` text NOT NULL,
`api_key` varchar(32) NOT NULL,
`api_sync_key` varchar(10) NOT NULL,
`api_sync_word` varchar(10) NOT NULL,
`Hash` varchar(32) DEFAULT NULL,
`start_time` decimal(4,2) DEFAULT NULL,
`end_time` decimal(4,2) DEFAULT NULL,
`dinner_time` decimal(4,2) DEFAULT NULL,
`Phone_A` varchar(15) DEFAULT NULL,
`Phone` varchar(15) DEFAULT NULL,
`MobileNum` varchar(15) DEFAULT NULL,
`WorkNum` varchar(15) DEFAULT NULL,
`Emg` varchar(50) DEFAULT NULL,
`EmgNum` varchar(15) DEFAULT NULL,
`Address1` varchar(100) DEFAULT NULL,
`Address2` varchar(100) DEFAULT NULL,
`Address3` varchar(100) DEFAULT NULL,
`County` varchar(100) DEFAULT NULL,
`Post` varchar(100) DEFAULT NULL,
`DateJoined` varchar(30) DEFAULT NULL,
`LastLogged` int(11) DEFAULT NULL,
`DateLeft` int(11) DEFAULT NULL,
`Contract` int(3) DEFAULT NULL,
`Pay` int(3) DEFAULT NULL,
`Position` int(3) DEFAULT NULL,
`Active` varchar(255) DEFAULT NULL,
`Access` tinyint(2) DEFAULT NULL,
PRIMARY KEY (`ID`)
)
자세한 내용을 알고 내 대답을 확인하려면 여기에 두 개의 테이블 구조를 추가 할 수 있습니까? –
방금 – user3388630