【问题标题】:MySQL UNION - detect what of several SELECTs return resultMySQL UNION - 检测几个 SELECT 中的哪些返回结果
【发布时间】:2011-03-21 05:21:46
【问题描述】:

我有两个与 UNION 合并的 SELECT 查询。这是 MySQL 查询:

SELECT `id`,`type`,`text`
  FROM my_table 
 WHERE position = '1' 
   AND status = '1' 
   AND targeting = 'all'
UNION
SELECT `id`,`type`,`text` 
  FROM my_table 
 WHERE position = '1' 
   AND status = '1' 
   AND targeting LIKE '%US%'

如何找出这两个使用 TRUE 执行的 SELECT 查询中的哪一个,以便从所需行中获取结果?

【问题讨论】:

    标签: mysql sql union


    【解决方案1】:

    您可以在查询中添加额外的列,根据查询成功的部分返回不同的常量:

    SELECT 'query1' AS `src`, `id`, `type`, `text`
    FROM my_table
    WHERE position = '1' AND status = '1' AND targeting = 'all'
    
    UNION ALL
    
    SELECT 'query2' AS `src`, `id`, `type`, `text`
    FROM my_table
    WHERE position = '1' AND status = '1' AND targeting LIKE '%US%'
    

    同样在这种情况下,您根本不需要 UNION:

    SELECT
        targeting LIKE '%US%' AS `targeting_like_us`,
        targeting = 'all' AS `targeting_equals_all`,
        `id`,
        `type`,
        `text`
    FROM my_table
    WHERE position = '1'
    AND status = '1'
    AND (targeting LIKE '%US%' OR targeting = 'all')
    

    【讨论】:

    • @Mark Byers 以及如何在我的 PHP 脚本中使用它?请告诉我!
    • @ilnur777:到目前为止你有什么?你能发布你当前的 PHP 脚本吗?
    • @Mark Byers 我需要一个 SELECT 查询,它将根据行上设置的目标从 my_table 中获取一行并将其显示在广告位置。由于我有随机横幅显示脚本,因此广告只会显示给目标访问者或所有访问者。
    • 我会使用 CASE 语句在单个列中返回 all vs %US%,根据匹配返回 1 或 2。
    • @OMG Ponies 你能举个例子吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多