PHP / MySQL - 匹配2个表

时间:2014-08-04 02:37:11

标签: php mysql sql

我正在处理一些结构不太友好的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' s:

    Table: altarticles

    textID 
    1
    25
    51

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

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

如何做到这一点?

1 个答案:

答案 0 :(得分:0)

这应该通过使用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
';