我正在处理一些结构不太友好的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
如何做到这一点?
答案 0 :(得分:0)
这应该通过使用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
';