2016-07-26 21 views
2

Ich habe derzeit drei Tabellen:MySQL/MariaDB - Abfrage in der Tabelle über einen Tabellenverweis Suche

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 ist eigentlich eine Referenztabelle, die ich mit erstellt haben:

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 
); 

I‘ m versucht, Elemente aus den Tabellenprodukten zu filtern, indem nach einem entsprechenden Tag gesucht wird. Ich habe bereits einige similar problems gefunden, aber ich konnte es nicht richtig funktionieren ....

Vielen Dank im Voraus.

+0

Bitte Dokumentation auf mysql lesen. Fremdschlüssel-Referenz verbindet verknüpfte Tabellen NICHT automatisch. Sie müssen JOIN verwenden, um die tatsächliche Beziehung zu aktivieren. – mootmoot

Antwort

0

Diese Abfrage beitreten:

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

Vielen Dank, dass tatsächlich funktioniert. Könnten Sie mir bitte sagen, warum ich p. * Schreiben muss, wo ich normalerweise den Tabellennamen setze. (das hat mich an erster Stelle in anderen Beispielen verwirrt). – derped

+1

@derped: Man muss mysql EXPLICIT Zieltabellenname und Spaltenname mitteilen, wenn Joins passiert. Da der Tabellenname sehr lang sein kann, können wir ihn durch einen kurzen Aliasnamen ersetzen (d. H. 'FROM product p' oder spezifischer' FROM product "p" ') – mootmoot