2014-05-22 91 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