meerdere rijen updaten met concatenatie van twee kolommen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom Delonge

Tom Delonge

01/12/2011 11:51:18
Quote Anchor link
hoi iedereen,

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
 
PHP hulp

PHP hulp

05/11/2024 22:20:19
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

01/12/2011 12:47:10
Quote Anchor link
De oplossing is ook eenvoudig
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT (m.manufactures_name || '' || p.products_name) AS pfull , p.products_description AS description
FROM products
JOIN manufacturers AS m USING manufacturers_id
JOIN products_description AS p USING products_id
 
Tom Delonge

Tom Delonge

01/12/2011 16:14:25
Quote Anchor link
bedankt voor de snelle reactie! op die select moet ik dan gebruiken in mijn update statement waarschijnlijk? hoe komt dat eruit te zien?
 
- SanThe -

- SanThe -

01/12/2011 16:20:46
Quote Anchor link
Wat mag het nut zijn van dubbele gegevens in je database?
 
Tom Delonge

Tom Delonge

01/12/2011 16:38:06
Quote Anchor link
de juiste query is volgens mij:

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?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

01/12/2011 16:42:53
Quote Anchor link
Wat je wil dan updaten? Kijk naar wat SanThe zegt
Je kan doormiddel van een join gegevens uit meerdere tabellen ophalen met 1 query.
Overigens vind ik je database overgenormaliseerd.
 
- SanThe -

- SanThe -

01/12/2011 16:43:06
Quote Anchor link
Waarom wil je de database om zeep helpen?
 
Tom Delonge

Tom Delonge

01/12/2011 16:44:06
Quote Anchor link
ik wil de database niet om zeep helpen, de product naam moet nu eenmaal de merknaam erin bevatten. dat vind ik logisch..
 
- SanThe -

- SanThe -

01/12/2011 16:45:27
Quote Anchor link
Een product kan toch bekend zijn onder meerdere merken.
 
Tom Delonge

Tom Delonge

01/12/2011 16:54:56
Quote Anchor link
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..
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

01/12/2011 17:22:01
Quote Anchor link
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.
 
Tom Delonge

Tom Delonge

02/12/2011 08:43:49
Quote Anchor link
dus ik pas het beter overal op de site aan dat eerst de merknaam geprint wordt en dan de productnaam?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/12/2011 09:34:31
Quote Anchor link
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.
 
Tom Delonge

Tom Delonge

02/12/2011 10:02:58
Quote Anchor link
waarom is het eigenlijk zo onverstandig?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/12/2011 11:08:58
Quote Anchor link
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.
 
Erwin H

Erwin H

02/12/2011 11:23:24
Quote Anchor link
Meest logische lijkt mij om een view te bouwen zodat je een virtuele tabel krijgt met de data zoals jij het wilt hebben, maar dan zonder dubbele data in je database.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.