【问题标题】:Distinguish two queries within a union区分联合中的两个查询
【发布时间】:2014-04-07 01:34:44
【问题描述】:

在以下联合查询示例中,我如何区分记录的来源:

SELECT id, name, datetime FROM events
UNION
SELECT id, name, datetime FROM festival
ORDER BY datetime DESC

我在 PHP 中的使用方式是:

$stmt = $cxn->prepare('SELECT id, name, datetime FROM events WHERE id = ? UNION SELECT id, name, datetime FROM festival WHERE id = ? ORDER BY datetime DESC');
$stmt->bind_param('i', $event_id);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $name, $datetime);

while ($stmt->fetch()) {
    echo "ID: " . $id . "\n";
    echo "Name: " . $name . "\n";
    echo "Date: " . $datetime;
}

$stmt->close();

【问题讨论】:

    标签: php mysql sql mysqli


    【解决方案1】:
    SELECT id, name, datetime, 'events' FROM events
    UNION
    SELECT id, name, datetime, 'festival' FROM festival
    ORDER BY datetime DESC
    

    PHP

    $stmt = $cxn->prepare('SELECT id, name, datetime, "events" as tablename FROM events WHERE id = ? UNION SELECT id, name, datetime, "festival" as tablename FROM festival WHERE id = ? ORDER BY datetime DESC');
    $stmt->bind_param('i', $event_id);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($id, $name, $datetime, $table);
    
    while ($stmt->fetch()) {
        echo "ID: " . $id . "\n";
        echo "Name: " . $name . "\n";
        echo "Date: " . $datetime;
        echo "Which Table: " . $table;
    }
    
    $stmt->close();
    

    【讨论】:

    • 既然我正在绑定结果,如何以我在 PHP 中设置的方式获取该列?
    • 一个改进是使用UNION ALL,因为这些记录不能再匹配了
    【解决方案2】:

    您可以通过再添加一列并将其区分为:

    SELECT id, name, datetime, 'E' as fromwhere FROM events
    UNION
    SELECT id, name, datetime,'F' as fromwhere FROM festival
    ORDER BY datetime DESC
    

    fromwhere 列会告诉您它是来自活动还是节日。

    【讨论】:

    • 由于我正在绑定结果,如何以我在 PHP 中设置的方式获得 fromwhere 列?
    • 在 php 中不能在查询本身中添加 fromwhere 吗?像这样 SELECT id, name, datetime, 'E'FROM events WHERE id = ? UNION SELECT id, name, datetime, 'F' FROM Festival WHERE id = ?按日期时间 DESC 排序'
    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多