2

次のような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 .= "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);

さて、私が知りたいのは、各結果がどのテーブルからのものであるかということです。したがって、返された各結果に何らかのカスタム結果を追加して、それがどのテーブルからのものであるかを何らかの形で示すことができるかどうか疑問に思いました。

返された結果にどういうわけか余分な「動的」列を追加できますか?

4

2 に答える 2

2

もちろん。無関係な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

これは、行がユニオンのどちら側から来たかに応じて、異なる値(行が選択されたテーブルの後に「news」と「event」を使用)を持つ定数列(「type」と呼びます)を追加するだけです。

于 2012-12-09T07:49:10.753 に答える
2

これを試して:

$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);
于 2012-12-09T07:51:23.083 に答える