2013-06-05 98 views
0

我试图从标题中描述的表中获取一些值,但我不知道如何,我试过这个,但它只返回最后一个值(从一个查询中的不同列中选择不同的表

$result = $stmt->bind_result($prio, $stat, $tit, $name, $dpname, $tomail, $opname); 
while (mysqli_stmt_fetch($stmt)){ 
$mail=$tomail; 
$rep=array(
    '{TICKET_OPERATOR_NAME}'=>$opname, 
    '{TICKET_CREATOR_NAME}'=>$name, 
    '{TICKET_PRIORITY}'=>$prio, 
    '{TICKET_STATUS}'=>$stat, 
    '{TICKET_DEPARTMENT}'=>$dpname, 
    '{TICKET_URL}'=>dirname(dirname(curPageURL())).'user/view.php?'.$argv[2], 
    '{TICKET_TITLE}'=>$tit); 
} 

这是结果::

Array 
(
    [{TICKET_OPERATOR_NAME}] => Adelaide 
    [{TICKET_CREATOR_NAME}] => 
    [{TICKET_PRIORITY}] => 
    [{TICKET_STATUS}] => 
    [{TICKET_DEPARTMENT}] => 
    [{TICKET_URL}] => http://razorphyn.com/products/supportuser/view.php?e4e0d6dac254c905862480f8a16273f7c3157b80db2c2ad7f03306376da85ef451adf0cc71ce60.98140917 
    [{TICKET_TITLE}] => 
    [{SITE_NAME}] => Razorphyn 
    [{SITE_ADDRESS}] => http://razorphyn.com 
) 
执行查询之后

SELECT * 
FROM (
(SELECT a.priority,a.ticket_status,a.title, b.name ,c.department_name, null, null 
FROM ".$SupportTicketsTable." a, ".$SupportUserTable." b, ".$SupportDepaTable." c 
WHERE a.enc_id=? AND b.id=a.user_id AND c.id=a.department_id LIMIT 1) 
UNION 
(SELECT null,null,null,null,null, b.mail,b.name 
FROM ".$SupportTicketsTable." a, ".$SupportUserTable." b 
WHERE a.enc_id=? AND b.id=a.operator_id LIMIT 1)) AS t2 

:所述第二的b.name选择)

,这应该是最后的输出:

Array 
(
    [{TICKET_OPERATOR_NAME}] => Adelaide 
    [{TICKET_CREATOR_NAME}] => Pippo 
    [{TICKET_PRIORITY}] => 0 
    [{TICKET_STATUS}] => 1 
    [{TICKET_DEPARTMENT}] => Support 
    [{TICKET_URL}] => http://razorphyn.com/products/supportuser/view.php?e4e0d6dac254c905862480f8a16273f7c3157b80db2c2ad7f03306376da85ef451adf0cc71ce60.98140917 
    [{TICKET_TITLE}] => Test 
    [{SITE_NAME}] => Razorphyn 
    [{SITE_ADDRESS}] => http://razorphyn.com 
) 
[email protected] 

表:提前

CREATE TABLE IF NOT EXISTS `razorphyn_support_list_tickets` (
`id`    BIGINT(15) UNSIGNED  NOT NULL AUTO_INCREMENT, 
`enc_id`   CHAR(87), 
`department_id`  BIGINT(11) UNSIGNED  NOT NULL, 
`operator_id`  BIGINT(11) UNSIGNED  NOT NULL DEFAULT 0, 
`user_id`   BIGINT(11) UNSIGNED  NOT NULL, 
`title`    VARCHAR(255)    NOT NULL, 
`priority`   INT(2)  UNSIGNED  NOT NULL, 
`website`   VARCHAR(200)    NOT NULL, 
`contype`   ENUM('0','1','2','3','4','5') NOT NULL DEFAULT '0', 
`ftp_user`   VARCHAR(60)     NOT NULL, 
`ftp_password`  VARCHAR(60)     NOT NULL, 
`created_time`  DATETIME     NOT NULL, 
`last_reply`  DATETIME     NOT NULL, 
`ticket_status`  ENUM('0','1','2')   NOT NULL DEFAULT '2', 
PRIMARY KEY (`id`), 
UNIQUE KEY (`user_id`,`title`), 
INDEX (`enc_id`,`department_id`,`operator_id`,`user_id`,`ticket_status`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20; 

CREATE TABLE IF NOT EXISTS `razorphyn_support_users` (
`id`    BIGINT(15) UNSIGNED  NOT NULL AUTO_INCREMENT, 
`name`    VARCHAR(50)     NOT NULL, 
`mail`    VARCHAR(50)     NOT NULL, 
`password`   VARCHAR(200)    NOT NULL, 
`reg_key`   VARCHAR(260)    NOT NULL, 
`tmp_password`  VARCHAR(31)     NULL, 
`ip_address`  VARCHAR(50)     NOT NULL, 
`status`   ENUM('0','1','2','3','4') NOT NULL DEFAULT '3', 
`holiday`   ENUM('0','1')    NOT NULL DEFAULT '0', 
`mail_alert`  ENUM('no','yes')   NOT NULL DEFAULT 'yes', 
`assigned_tickets` INT(5) UNSIGNED   NOT NULL DEFAULT 0, 
`solved_tickets` BIGINT(11) UNSIGNED  NOT NULL DEFAULT 0, 
PRIMARY KEY (`id`), 
UNIQUE KEY(`mail`), 
INDEX (`name`,`mail`,`status`,`holiday`,`assigned_tickets`,`solved_tickets`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=55; 

CREATE TABLE IF NOT EXISTS `razorphyn_support_departments` (
`id`    BIGINT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
`department_name` VARCHAR(70)    NOT NULL, 
`active`   ENUM('0','1')   NOT NULL DEFAULT '1', 
`public_view`  ENUM('0','1')   NOT NULL DEFAULT '1', 
PRIMARY KEY  (`id`), 
UNIQUE KEY  (`department_name`), 
INDEX (`id`,`department_name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0; 

感谢

+0

你期望什么结果? –

+0

基本上所有的阵列应该可以完成,我更新的问题 – Razorphyn

+0

更新,我要跌也是第一选择,并采取有关'C'表以外的部分? – Razorphyn

回答

1

也许这样:

SELECT 
a.priority,a.ticket_status ,a.title, b.name ,c.department_name, 
tu.mail,tu.name 
FROM 
razorphyn_support_list_tickets a, 
razorphyn_support_users b, 
razorphyn_support_departments c, 
razorphyn_support_list_tickets lt, 
razorphyn_support_users tu 
WHERE 
a.enc_id=? 
AND b.id=a.user_id 
AND c.id=a.department_id 
AND tu.id=lt.operator_id 
LIMIT 1; 
+0

它的工作原理就像一个魅力,非常感谢你! – Razorphyn

0

不知道哪些DB您使用(假设它是MySQL或Postgre)但你有没有尝试子选择:

SELECT a.priority,a.ticket_status,a.title, b.name ,c.department_name, d.mail, d.name 
FROM ".$SupportTicketsTable." a, ".$SupportUserTable." b, ".$SupportDepaTable." c, 
    (SELECT b1.id, b1.mail,b1.name 
     FROM ".$SupportTicketsTable." a1, ".$SupportUserTable." b1 
     WHERE b1.id=a1.user_id 
    ) d 
    WHERE a.enc_id=? AND b.id=a.user_id AND c.id=a.department_id AND d.id = b.id LIMIT 1) 
) AS t2 
+0

每个派生的表必须有自己的别名,但是是MySQL的 – Razorphyn

相关问题