2014-05-22 5 views
-3

현재 각 행에 대해 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,173

Array 
(
    [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`) 
) 
+0

자세한 내용을 알고 내 대답을 확인하려면 여기에 두 개의 테이블 구조를 추가 할 수 있습니까? –

+0

방금 ​​ – user3388630

답변

1

다음에 따라 내가 쓴대로 쿼리를 작성해야 귀하의 테이블 구조 인 경우.

TABLE NAME: Users (Your Primary Table) 
UID  PK 
FirstName 
LastName 

TABLE NAME: Clients 
ClientID PK 
NAME 
UID  FK 

SELECT u.UID AS UID, 
    u.FirstName AS FirstName, 
    u.LastName AS LastName, 
    c.ClientID AS ClientID, 
    c.Name AS NAME 
FROM users AS u 
LEFT JOIN clients AS c ON u.UID = c.UID 
WHERE u.UID = :UID; 
+0

건배를 업데이트했습니다. 시도해 보겠습니다. – user3388630

+0

네, 할 수 있고 당신을 위해 일한다고 말할 수 있습니까? –

+0

네, 잘 작동합니다! 건배 – user3388630

관련 문제