[英]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 a
和altarticles 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.