請問該如何下sql語法,
才可以查詢跟ASP有關聯的[posts]資料表之title:
=>當輸入ID=3,會到tags_relation資料表抓出 tag_id=3
(slect * form tags_relation where tag_id=3)
=>查到[tags_relation]資料表中有符合的post_id有:74、75
=>再到[posts]資料表查出ID=74 的 title是HELLO1
查出ID=75 的 title是HELLO2
得到一開始的想知道誰會ASP,分別是HELLO1跟HELLO2這樣~~
posts:
ID title
74 HELLO1
75 HELLO2
76 HELLO3
tags:
ID tag
3 ASP
61 PHP
62 JSP
63 COMCOB
tags_relation:
post_id|tag_id
74 3
74 61
75 3
75 62
75 63
可用雙SQL達到此效果的語法,希望可簡化成單一SQL
$ID='3';
$loop = mysql_query("slect post_id form tags_relation where tag_id=$ID");
while ($row = mysql_fetch_array($loop)){
$ID=$row['post_id'];
$result = db_query("slect * form posts where ID=$ID ","");
$row2 = mysql_fetch_assoc($result);
echo $row2['title'];//標題
}
<pre class="c" name="code">CREATE TABLE posts (
id TINYINT UNSIGNED NOT NULL PRIMARY KEY,
title CHAR(6) NOT NULL
);
INSERT INTO posts(id, title) VALUES
(74, 'Hello1'),(75, 'Hello2'),(76, 'Hello3');
CREATE TABLE tags (
id TINYINT UNSIGNED NOT NULL PRIMARY KEY,
tag CHAR(6) NOT NULL
);
INSERT INTO tags(id, tag) VALUES
(3, 'ASP'), (61, 'PHP'), (62, 'JSP'), (63, 'COMCOB');
CREATE TABLE tags_relation (
post_id TINYINT UNSIGNED NOT NULL,
tag_id TINYINT UNSIGNED NOT NULL
);
INSERT INTO tags_relation(post_id, tag_id) VALUES
(74, 3),(74, 61),(75, 3),(75, 62),(75, 63);
SELECT p.title
FROM tags t
, tags_relation r
, posts p
WHERE t.tag = 'ASP'
AND t.id = r.tag_id
AND r.post_id = p.id;
+--------+
| title |
+--------+
| Hello1 |
| Hello2 |
+--------+
老鷹斗膽解答,答錯了不要拿彈弓射老鷹
看到樓主這樣寫,讓老鷹想到JOIN + WHERE
情境模式-訂貨廠商查詢
老鷹製作三張資料表
A table
ID
姓名
B table
ID
廠商
C table
ID
廠商ID
姓名ID
要查一個叫做王小明 的廠商列表
老鷹會這樣下SQL
<pre class="c" name="code">
SELECT * FROM `A`,`B`,`C` WHERE C.廠商ID = B.ID AND C.姓名ID=A.ID AND A.姓名="王小明"
這樣就可發現原來小明的腿是被這些廠商打斷的
如有講錯 歡迎指正
個人不建議用 from 後面寫多個資料表
因為這樣串起來的結果是 INNER JOIN
個人建議改用LEFT JOIN
這樣才比較不會因為資料對不起來, 而查詢時漏失掉
<pre class="c" name="code">
select * from `A`
left join `B` on C.姓名ID = A.ID
left join `C` on C.廠商ID = B.ID
where A.姓名="王小明"
這樣事先從Table A
抓篩選的資料, 在分別把在Table B
與C
的資料串上去
<pre class="c" name="code">
select A.*, B.*, C.* from `A`
left join `B` on C.姓名ID = A.ID
left join `C` on C.廠商ID = B.ID
where A.姓名="王小明"
偷懶式 join
<pre class="c" name="code">
SELECT b.title
FROM tags_relation as a, posts as b
WHERE a.post_id = b.post_id
AND tag_id=$ID"