2013-01-02 69 views
0

我想我的数据库中的两个表似乎是一个简单的联合查询,但我无法检索成功的数组结果。应当注意的是,每个表都有不同的列和我想创建一个虚拟的结果(促销为原点[从“venpromo”表拉到结果] & &度假为原点[对结果从拉“休假'表]),以便将结果排序为不同的数组结构。我到处寻找,UNION都使用不同的语法。谢谢大家!问题UNION查询

<?php 
    require_once('includes/config.php'); 

    $event_query = "SELECT *, promo AS origin FROM venpromo 
    UNION 
    SELECT *, vacation AS origin FROM venpromo 
    ORDER BY popularity DESC"; 
    $event_result = mysql_query($event_query, $connection); 
    while ($event = mysql_fetch_array($event_result)) { 
     if ($event['origin'] == "promo") { 
      $event_array[] = array(
       'id' => $event['id'], 
       'title' => $event['calname'], 
       'start' => $event['sdate'], 
       'end' => $event['edate'], 
       'color' => "red", 
       'url' => "http://www.norrisportal.com/bulletinpost.php?id=" . $event['id'] . "&hashkey=akdULjsjyUpYyTzOT7" 
      ); 
     } elseif ($event['origin'] == "vacation") { 
      $event_array[] = array(
       'id' => $event['id'], 
       'title' => $event['reason'], 
       'start' => $event['vacstart'], 
       'end' => $event['vacend'], 
       'color' => "blue" 
      ); 
     } 
    } 

    echo json_encode($event_array); 

?> 

当访问该页面查看结果时,我看到'null'。

+1

你能给列和两个表的数据类型?你遇到了什么错误? –

+0

请将表结构添加到您的问题。这个信息是当关键谈论联合查询 –

+0

此链接显示从PHPMyAdmin的 [表结构]的结构的截屏(http://i48.tinypic.com/2yod9nm.jpg)。请原谅我的无知,我是UNION的新手,并再次感谢您的帮助! –

回答

2

将列名显式而不是*,并确保列的数量和数据类型匹配每个选择中的同一列。

我添加了一些虚拟列来匹配两个表中的数量和数据类型,并且还更改了列的顺序。

尝试这种方式样品::

select 
id, 
uid, 
approval, 
vacstart, 
vacend, 
reason, 
'dummy1' col1, 
'dummy2' col2, 
'dummy3' col3, 
curdate() col4, 
'dummy4' col5, 
'dummy5' col6, 
'dummy6' col7, 
'dummy7' col8, 
promo AS origin 
from vacation 
union 
select 
id, 
venid, 
authid, 
sdate, 
edate, 
authname, 
tags, 
title, 
calname, 
date, 
intro, 
body, 
sum, 
sortdate, 
vacation AS origin 
from venpromo; 
+1

+1,因为答案在理论上是正确的;还是,我看不到这些'promo'和'vacation'列在表格中 – Cynical