Mysql 在返回的数据集中创建自定义值/列

Mysql 在返回的数据集中创建自定义值/列,mysql,union,Mysql,Union,我有一种情况,我正在使用这样的工会: $query = "SELECT bigimage, heading, fullarticle, dateadded FROM news "; $query .= "WHERE (state = '" . $USER->state . "' OR state = 'ALL') AND status = 1 AND newstype != 1 AND frontpage = 1 AND bigimage > '' "; $query .= "UNI

我有一种情况,我正在使用这样的工会:

$query = "SELECT bigimage, heading, fullarticle, dateadded FROM news ";
$query .= "WHERE (state = '" . $USER->state . "' OR state = 'ALL') AND status = 1 AND newstype != 1 AND frontpage = 1 AND bigimage > '' ";
$query .= "UNION ";
$query .= "SELECT image, eventname, details, dateadded FROM events ";
$query .= "WHERE (state = '" . $USER->state . "' OR state = 'ALL') AND status = 1 AND frontpage = 1 AND image > '' ";
$query .= "ORDER BY dateadded DESC LIMIT 10";
$restresult = mysql_query($query);
现在,我想知道的是每个结果来自哪个表,所以我想知道是否可以在返回的每个结果中添加某种自定义结果,以某种形式指示它来自哪个表


我可以在返回的结果中添加一个额外的动态列吗?

当然可以。去掉不相关的php代码,您的查询可能是:

SELECT 'news' as type, bigimage, heading, fullarticle, dateadded FROM news
WHERE (state = ? OR state = 'ALL') AND status = 1 AND newstype != 1 AND frontpage = 1 AND bigimage > ''
UNION
SELECT 'event', image, eventname, details, dateadded FROM events 
WHERE (state = ? OR state = 'ALL') AND status = 1 AND frontpage = 1 AND image > ''
ORDER BY dateadded DESC 
LIMIT 10

这只是在选择行的表之后添加一个常量列,我称之为type,该列的值与我使用的news和event不同,具体取决于行来自联合体的哪一侧。

当然。去掉不相关的php代码,您的查询可能是:

SELECT 'news' as type, bigimage, heading, fullarticle, dateadded FROM news
WHERE (state = ? OR state = 'ALL') AND status = 1 AND newstype != 1 AND frontpage = 1 AND bigimage > ''
UNION
SELECT 'event', image, eventname, details, dateadded FROM events 
WHERE (state = ? OR state = 'ALL') AND status = 1 AND frontpage = 1 AND image > ''
ORDER BY dateadded DESC 
LIMIT 10
这只是简单地添加了一个常量列,我称之为type,它的值与我使用的news和event的值不同,具体取决于行来自联合体的哪一侧

$query = "SELECT bigimage, heading, fullarticle, dateadded, 'news' as TableName FROM news ";
$query .= "WHERE (state = '" . $USER->state . "' OR state = 'ALL') AND status = 1 AND newstype != 1 AND frontpage = 1 AND bigimage > '' ";
$query .= "UNION ";
$query .= "SELECT image, eventname, details, dateadded, 'event' FROM events ";
$query .= "WHERE (state = '" . $USER->state . "' OR state = 'ALL') AND status = 1 AND frontpage = 1 AND image > '' ";
$query .= "ORDER BY dateadded DESC LIMIT 10";
$restresult = mysql_query($query);
试试这个:

$query = "SELECT bigimage, heading, fullarticle, dateadded, 'news' as TableName FROM news ";
$query .= "WHERE (state = '" . $USER->state . "' OR state = 'ALL') AND status = 1 AND newstype != 1 AND frontpage = 1 AND bigimage > '' ";
$query .= "UNION ";
$query .= "SELECT image, eventname, details, dateadded, 'event' FROM events ";
$query .= "WHERE (state = '" . $USER->state . "' OR state = 'ALL') AND status = 1 AND frontpage = 1 AND image > '' ";
$query .= "ORDER BY dateadded DESC LIMIT 10";
$restresult = mysql_query($query);

谢谢,但是为什么要将$USER->state替换为??这是JDBC表示变量占位符的方式,但是它也很简短,并且不会用非sql的东西来混乱答案。显然,您必须以特定于语言的方式将值放回原处。谢谢,但是为什么要将$USER->state替换为??这是JDBC表示变量占位符的方式,但它也很简单,并且不会用非sql内容将答案弄乱。显然,您必须以特定于语言的方式重新输入值