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