Ich habe drei Tabellen (SQLFiddle with tables created)MySQL Update-Reihen mit Doppel LEFT JOIN, die Begrenzung ersten Spiel
orange Text ist, was ich durch den Vergleich mit Products.name Filters.filter erhalten müssen.
habe ich herausgefunden, dass String Spiel wie dies getan werden kann:
on Products.name LIKE CONCAT('%',Filters.filter,'%');
Ich brauche nur die erste Übereinstimmung mit dem Filter verwendet werden. Also passt "Pilzsuppe" zu "Suppe" und nicht zu "Pilz".
Was ist der beste Ansatz für diese Aufgabe?
Eine getestete SQLFiddle-Verbindung, wenn möglich, bitte.
Was ich versucht: (fühlen sich frei, alles unter überspringen)
Versuchte Doppel beitreten:
update Products
left join Filters on Products.name LIKE CONCAT('%',Filters.filter,'%')
join Categories on Filters.category_name = Categories.name
set Products.category_id = Categories.id, Products.filter = Filters.filter;
Aber das ist nicht in ersten Spiel verwendet wird, führt, weil zuerst beitreten zurückgegeben alle Filter entspricht (mehrere Zeilen pro 1 Produkt), und nach dem zweiten Beitritt Kategorien sind von der letzten Übereinstimmung.
Zum Beispiel: Pilzsuppe kam in die Kategorie "Pilz-Zutaten" statt in "Suppe \ Mahlzeiten".
versuchte auch beitreten + Bestellung von:
select Products.name, Filters.*
from Products
left join Filters on Products.name LIKE CONCAT('%',Filters.filter,'%')
group by Products.name;
Dies gibt das erste Spiel pro Produkt als ich brauchte, aber ich kann ein zweiter von links kommen in derselben Abfrage nicht, weder kann ich " Gruppieren nach "nach" update "-Funktion statt" select "arbeiten.
Denn wenn sqlfiddle kollabiert:
CREATE TABLE Products
(
`name` varchar(30),
`category_name` varchar (30),
`category_id` int
);
INSERT INTO Products (`name`)
VALUES ('Mushrooms'), ('Can of mushrooms'),
('Can of soup'), ('Mushroom soup'),
('Tomato soup'), ('Tomato');
CREATE TABLE Filters
(
`filter` varchar(30),
`category_name` varchar(30)
);
INSERT INTO Filters (`filter`, `category_name`)
VALUES ('Can of', 'Canned food'), ('Soup', 'Meals'),
('Mushroom', 'Ingredients'), ('Tomato', 'Ingredients');
CREATE TABLE Categories
(
`id` int,
`name` varchar(30)
);
INSERT INTO Categories (`id`, `name`)
VALUES (1, "Canned food"), (2, 'Ingredients'), (3, 'Meals');
Wow, so schön, tatsächlich solche Bemühungen in Richtung [mcve] zu sehen. – philipxy
@philipxy Danke! Die Erstellung einer einfachen Problemstichprobe kommt allen zugute: demjenigen, der Schwierigkeiten hat, denen, die helfen können, und denen, die diese Frage in Zukunft lesen werden. Außerdem löse ich oft das Problem, bevor ich hier schreibe, nur indem ich versuche, einen einfachen Testfall zu erstellen :) – Trost