2014-05-22 89 views
-3

目前我有一個循環從每個行的2個表,用戶和客戶端檢索數據。所以查詢堆疊起來。mysql連接查詢不返回正確的值

首先,這是一件壞事嗎? 我正在尋找每頁顯示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  

這是返回什麼:

Array 
(
    [0] => Array 
     (
      [name] => UID 
      [value] => 1 
      [type] => 1 
     ) 

    [1] => Array 
     (
      [name] => ClientID 
      [value] => 8 
      [type] => 1 
     ) 

    [2] => Array 
     (
      [name] => CID 
      [value] => 1 
      [type] => 1 
     ) 

    [3] => Array 
     (
      [name] => CID2 
      [value] => 1 
      [type] => 1 
     ) 

) 

我期待的是返回,如:

Array 
(
    [UID] => 1 
    [FirstName] => John 
    [LastName] => Smith 
    [ClientID] => 1 
    [Name] => Client Name 
) 

任何人都知道我要去哪裏錯了嗎?

更新

客戶表

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