繁体   English   中英

PHP / MySQL-匹配2个表

[英]PHP / MySQL - Match against 2 tables

我正在使用一些结构不太友好的MySQL表。

目前,我有一个类似以下的查询:

$query = 'SELECT textID, subject FROM articles 
 WHERE (UPPER(subject) LIKE "%'.$string.'%") AND status = "1" 
 ORDER BY CASE WHEN subject LIKE "'.$search.' %" THEN 0 
 WHEN creator LIKE "'.$search.'%" THEN 1 
 WHEN email LIKE "'.$search.'%" THEN 2 ELSE 3 END, 
 subject LIMIT 10';

然后,我显然可以运行并得到如下结果:

    $res = $db->query($query);
    $result = array();

    while($results = $res->fetch_assoc()) {
    $result[] = $results;
    }

现在,我已经从数据库中提取了数据,现在需要将其与第二个表中的数据进行匹配,以便我只能获取/使用匹配的结果。

我现在想针对第二个表运行上述数组,特别是针对每个结果检索的“ textID”,以仅使用与第二个表中的“ textID”匹配的数组结果。

例如:假设上面的查询返回了以下内容(注意:这些结果将基于查询中使用的“字符串”是动态的):

    Table: articles

    textID ----- Subject
    1       |     Test 
    4       |     Test 2
    25      |     Test 3
    33      |     Test 4
    51      |     Test 5

我想运行第二个查询(或将其实现到原始查询中),使其与共享相同textID的第二个表中的任何条目匹配“ textID”。

因此,如果第二个MySQL表具有以下匹配的textID:

    Table: altarticles

    textID 
    1
    25
    51

我想废弃原始的“ $ result []”并创建一个仅包含匹配结果的新数组:

    textID ----- Subject
    1       |     Test 
    25      |     Test 3
    51      |     Test 5

人们将如何去做呢?

这应该通过使用JOIN子句轻松完成。 在TextID字段上JOIN altarticles 别名每个表articles aaltarticles aa然后SELECT aa.subject而不是原始表的主题。

常规JOIN也称为内部联接,这意味着仅显示符合两个表条件的行。

$query = '
    SELECT
        a.textID, 
        a.subject 
    FROM articles a
    JOIN altarticles aa ON (a.textID = aa.textID)
    WHERE 
        (UPPER(a.subject) LIKE "%'.$string.'%") 
        AND a.status = "1" 
        ORDER BY CASE 
            WHEN a.subject LIKE "'.$search.' %" THEN 0 
            WHEN a.creator LIKE "'.$search.'%" THEN 1 
            WHEN a.email LIKE "'.$search.'%" THEN 2 
            ELSE 3 END, a.subject 
        LIMIT 10
';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM