mysql连接查询没有返回正确的值

时间:2014-05-22 08:15:15

标签: php mysql

目前我有一个循环,可以从每个行的2个表,用户和客户端检索数据。所以查询正在堆叠。

首先,这是件坏事吗? 我希望每页显示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`)
) 

1 个答案:

答案 0 :(得分: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;