meerdere rijen updaten met concatenatie van twee kolommen
het idee is vrij eenvoudig, de oplossing misschien niet. in mijn webshop bevatten de productnamen niet de merknaam. zo zal een sony 42" lcd tv op de site verschijnen als 42" lcd tv en onder merk staat dan ergens sony. nu zou ik mijn volledige database willen aanpassen zodat ook de merknaam in de productnaam voorkomt (beter voor seo en mooier op de site ook).
ik heb even in de database gekeken en er zijn drie tabellen mee gemoeid:
products_description: bevat products_id en products_name
manufacturers: bevat manufacturers_id en manufacturers_name
products: bevat products_id en manufacturers_id
voorbeeld: product 15 met naam 42" lcd tv heeft manufacturer 3 met naam sony. de products_name van alle producten zou nu aangepast moeten worden naar een concatenatie van de manufacturers_name en de huidige products_name.
kan iemand hiervoor een query maken?
grtz,
stein
bedankt voor de snelle reactie! op die select moet ik dan gebruiken in mijn update statement waarschijnlijk? hoe komt dat eruit te zien?
Wat mag het nut zijn van dubbele gegevens in je database?
UPDATE products_description prd
INNER JOIN products p
ON prd.products_id = p.products_id
SET prd.products_name = '(SELECT CONCAT(m.manufacturers_name, ' ', prd.products_name) FROM products_description prd JOIN manufacturers m ON m.manufacturers_id = p.manufacturers_id JOIN products p ON p.products_id = prd.products_id)'
WHERE p.products_id = '16867'
dat is een voorbeeldje voor product '16867'. weet iemand wat ik in de WHERE moet plaatsen om dit nu voor alle rijen in de tabel toe te passen?
Je kan doormiddel van een join gegevens uit meerdere tabellen ophalen met 1 query.
Overigens vind ik je database overgenormaliseerd.
Waarom wil je de database om zeep helpen?
ik wil de database niet om zeep helpen, de product naam moet nu eenmaal de merknaam erin bevatten. dat vind ik logisch..
Een product kan toch bekend zijn onder meerdere merken.
neen, je hebt een sony lcd tv of je hebt een samsung lcd tv. 1 product heeft 1 merk. ik vind gewoon de omschrijving 42" lcd tv als productnaam onvolledig als het om een sony 42" lcd tv gaat..
Stein de sutter op 01/12/2011 16:54:56:
neen, je hebt een sony lcd tv of je hebt een samsung lcd tv. 1 product heeft 1 merk. ik vind gewoon de omschrijving 42" lcd tv als productnaam onvolledig als het om een sony 42" lcd tv gaat..
Kan ik begrijpen, maar het is niet nodig om daarvoor je product_description tabel te updaten, het is zelfs onverstandig omdat te doen.
dus ik pas het beter overal op de site aan dat eerst de merknaam geprint wordt en dan de productnaam?
Stein de sutter op 02/12/2011 08:43:49:
dus ik pas het beter overal op de site aan dat eerst de merknaam geprint wordt en dan de productnaam?
Ik neem aan dat het tonen van producten via één script gaat, dus dat lijkt mij inderdaad de beste optie.
waarom is het eigenlijk zo onverstandig?
Dat heeft te maken met database consistentie. Stel dat een merk besluit de merknaam aan te passen, als je het gescheiden houdt hoef je maar één record in de manufacturers tabel aan te passen en wordt dit automatisch overal doorgevoerd. Als je de merknaam toevoegt aan de producten tabel moet je ook nog eens de proucten tabel aanpassen met een grote kans op fouten.
CREATE VIEW v_products AS
SELECT p.products_id, CONCAT(m.manufacturers_name, ' ', prd.products_name)
FROM products_description prd
JOIN manufacturers m ON m.manufacturers_id = p.manufacturers_id
JOIN products p ON p.products_id = prd.products_id
Als je dan de volledige naam van het product wil hebben doe je simpelweg:
SELECT *
FROM v_products
WHERE products_id = 12345
Als nu ergens de naam van een producent wijzigt, wijzigt het automatisch mee in je view.