在PHP中合并两个sql查询的结果


Merging the results of two sql queries in PHP

我正在尝试实现一个搜索功能,它不仅在一个表(任务)中搜索,而且在另一个相关表(活动)中搜索。Activities有一个列名称task,用于标识它所属的任务(即tasks表中的列keyid)。我搜索任务表的方式是:

SELECT
    tasks.*
FROM
    tasks
WHERE
    (
        (
            tasks.description LIKE '%$search%'
            OR tasks. NAME LIKE '$search%'
        )
        AND tasks. USER = '$userid'
    );

我搜索活动表的方式是:

SELECT DISTINCT
    tasks.*
FROM
    activities,
    tasks
WHERE
    tasks. USER = '1'
AND activities.description LIKE '%$search%';

单独的查询起作用,并且它们都返回任务表数据。我想做的是合并这两个结果(在php中),这样我只得到所有的表任务条目,而不会重复。

我该怎么做?

要么执行两个查询,然后使用array_merge()的变体合并结果(注意可能的重复),要么简单地用OR运算符连接两个SELECT语句中的WHERE子句:

SELECT
    DISTINCT tasks.*
FROM
    activities,
    tasks
WHERE
    (
        (
            tasks.description LIKE '%$search%'
            OR tasks.NAME LIKE '$search%'
        )
        AND tasks.USER = '$userid'
    )
    OR
    (
        tasks.USER = '$userid'
        AND activities.description LIKE '%$search%'
    );

应用一些布尔优化:

SELECT
    DISTINCT tasks.*
FROM
    activities,
    tasks
WHERE
    tasks.USER = '$userid'
    AND
    (
        tasks.description LIKE '%$search%'
        OR tasks.NAME LIKE '$search%'
        OR activities.description LIKE '%$search%'
    );

不管怎样,看到你的代码,我当然希望你能通过仔细地清理数据来保护自己免受SQL注入的影响,或者使用PDOStatement::bindParam来处理这些问题。