2016-07-26 8 views
2

私は現在、3つのテーブルがあります。のMySQL/MariaDB - 参照テーブルを介して、テーブルでの検索クエリ

desc products; 
+----------------+-------------------+------+-----+---------+----------------+ 
| Field   | Type    | Null | Key | Default | Extra   | 
+----------------+-------------------+------+-----+---------+----------------+ 
| id    | int(255) unsigned | NO | PRI | NULL | auto_increment | 
| name   | text    | NO |  | NULL |    | 
| desc_short  | text    | NO |  | NULL |    | 
+----------------+-------------------+------+-----+---------+----------------+ 

desc tags; 
+------------+-------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+------------+-------------------+------+-----+---------+----------------+ 
| id   | int(255) unsigned | NO | PRI | NULL | auto_increment | 
| tag  | varchar(255)  | YES | UNI | NULL |    | 
| iscategory | tinyint(4)  | NO |  | 0  |    | 
+------------+-------------------+------+-----+---------+----------------+ 

desc products_tags; 
+------------+-------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+------------+-------------------+------+-----+---------+-------+ 
| product_id | int(255) unsigned | YES | MUL | NULL |  | 
| tag_id  | int(255) unsigned | YES | MUL | NULL |  | 
+------------+-------------------+------+-----+---------+-------+ 

products_tagsは実際に私が作成した参照テーブルです:

CREATE TABLE product_tags (
    product_id INT(255) UNSIGNED, 
    tag_id INT(255) UNSIGNED, 
    CONSTRAINT fk_products_id FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT fk_tag_id FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE 
); 

私は」対応するタグを検索してテーブル製品から項目をフィルタリングしようとしています。 すでにsimilar problemsが見つかりましたが、正常に動作するようにはできませんでした。

ありがとうございます。

+0

のMySQLのドキュメントをお読みください。 Foreignkey referenceは関連テーブルを自動的に接続しません。実際の関係を有効にするには、JOINを使用する必要があります。 – mootmoot

答えて

0

が、これは、クエリに参加してみてください。

SELECT p.id, p.name, p.desc_short 
FROM products p 
INNER JOIN products_tag pt 
    ON p.id = pt.product_id 
INNER JOIN tags t 
    ON t.id = pt.tag_id 
WHERE t.tag = 'some tag' 
+0

本当にありがとうございました。 私は通常、テーブル名を置くp。*と書かなければならない理由を教えてください。 (他の例の最初の場所で実際に私を混乱させた)。 – derped

+1

@derped:結合が発生すると、mysql EXPLICITのターゲットテーブル名とカラム名を通知する必要があります。テーブル名は非常に長くなる可能性があるため、短いエイリアス名(「FROM product p」またはより具体的な「FROM product」p「 ')で置き換えることができます。 – mootmoot

関連する問題