2009-06-28 2 views
0

私は思うように私は助けを必要とします。それを理解できません。参加のヘルプ

私はこれらのテーブルを持っている:

投稿

`id` int(10) unsigned NOT NULL, 
`title` varchar(140) DEFAULT NULL, 
`text` text COLLATE utf8_unicode_ci 

記事のタグ

`post_id` int(10) unsigned NOT NULL, 
`tag_id` int(10) unsigned NOT NULL 

タグ

`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`name` varchar(40) DEFAULT NULL 

タグ付きのすべての投稿をループにしたい場合はteam-fortress-2どうすればいいですか?私はそれを理解することはできません。

$q = mysql_query("SELECT * FROM ... WHERE $get['tag']"); 
while($r = mysql_fetch_array($q)) { 

答えて

6
SELECT p.* 
FROM posts p 
JOIN posttags pt ON pt.post_id = p.id 
JOIN tags t ON pt.tag_id = t.id 
WHERE t.name = 'team-fortress-2' 

具体例です。 PHPでは、あなたはこれを行うだろう:タグのエスケープ

$tag = mysql_real_escape_string($get['tag']); 
$sql = <<<END 
SELECT p.* 
FROM posts p 
JOIN posttags pt ON pt.post_id = p.id 
JOIN tags t ON pt.tag_id = t.id 
WHERE t.name = '$tag' 
END; 
$query = mysql_query($sql); 
if (!$query) { 
    $error = mysql_error(); 
    die("Error $error for query $sql"); 
} 
... 

をあなたはどのような方法でユーザーの入力からそれを受け入れている場合は特に、本当に重要です。

+0

...ユーザー入力をエスケープについての警告のため – Guffa

+1

+1(SQLインジェクションの防止) – Lucero

1

SQL次のようになります。

p.post_idがpt.post_idれるべき
select 
    p.id, p.title, p.text 
from 
    Posts p 
    inner join PostTags pt on pt.post_id = p.id 
    inner join Tags t on t.id = pt.tag_id 
where 
    t.name = 'team-fortress-2' 
関連する問題