Versio

Mysql update

Overzicht Reageren

Derk  Janssen

Derk Janssen

26/01/2012 10:13:13
Quote Anchor link
Beste allemaal,
Ik heb een vaag.
Ik heb twee tabellen de een met de namen van de producten en de andere met de categorie id's.

Wat ik graag wil is dat alle producten die met de letter a beginnen naar een nieuwe categorie gaan.
Dus dan moet het categorie id in de tabel products_to_categories geupdate worden.

Dus hij moet kijken in de tabel met producten kijken welke producten met de letter a beginnen en die selecteren.
Daarna moet hij die update uitvoeren in de tabel met de products_to_categories.
Het eenige wat over een komt in die twee tabelen zijn de product_id.
Zie hier onder wat ik geprobeerd hebt maar niet werkt.
Ook hier onder de tabel struktuur.
Ik hoop dat iemand mijn kan helpen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE products_to_categories AS  ptc, products_description AS pd  SET ptc.categories_id = 36 WHERE LOWER(pd.products_name) LIKE '%a%'



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
CREATE TABLE `products_to_categories` (
  `products_id` int(11) NOT NULL,
  `categories_id` int(11) NOT NULL,
  PRIMARY KEY (`products_id`,`categories_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `products_description` (
  `products_id` int(11) NOT NULL AUTO_INCREMENT,
  `language_id` int(11) NOT NULL DEFAULT '1',
  `products_name` varchar(64) COLLATE latin1_general_ci NOT NULL DEFAULT '',
  `products_description` text COLLATE latin1_general_ci,
  `products_url` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
  `products_viewed` int(5) DEFAULT '0',
  PRIMARY KEY (`products_id`,`language_id`),
  KEY `products_name` (`products_name`)
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
 
PHP hulp

PHP hulp

25/05/2012 06:55:57
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Aad B

Aad B

26/01/2012 10:24:00
Quote Anchor link
Je WHERE clausule moet anders, met een subquery
WHERE ptc.products_id = (
SELECT ptc.products_id
FROM products_description
WHERE LOWER(pd.products_name) LIKE '%a%')

Het kan zijn dat deze constructie niet mag en je een mutating table error krijgt. Vreemd datamodel overigens tenzij er voor je products_description meerdere categorieen van toepassing kunnen zijn. Klopt dat?
Gewijzigd op 26/01/2012 10:25:31 door Aad B
 
Derk  Janssen

Derk Janssen

26/01/2012 10:32:11
Quote Anchor link
Hoi Add B
Ik krijg geen error maar hij zet nu alle prodcten in de tabel products_to_categories op 36
Het datamodel is inderdaad een beetje raar het is van oscommerce en producten kunnen inderdaad in meerdere categorie zitten.
Wat het probleem is waarom ik dit wil ik heb gister 5000 producten toeevoerd van uit exel dat is allemaal goed gegaan.
Nu wil ik ze alleen sorteren aangezien het om cd's gaat wil ik categorie aan maken van a tot z maar als je weet dat a al 400 cd's bevat wil je dat niet handmatig sorteren.
Overgens heb ik net ook nog iets anders geprobeerd maar dat wil ook niet.

UPDATE
products_to_categories
INNER JOIN
products_description ON products_description.products_id = products_to_categories.products_id AND LOWER(products_description.products_name) LIKE '%a%'
SET
categories_id = 35
 
Aad B

Aad B

26/01/2012 10:47:37
Quote Anchor link
excuus, stukje vergeten:
WHERE ptc.products_id = (
SELECT ptc.products_id
FROM products_description
WHERE LOWER(pd.products_name) LIKE '%a%'
AND ptc.products_id=pd.products_id)

Ik hoop dat je de totale update wel terug hebt kunnen draaien?
 
Derk  Janssen

Derk Janssen

26/01/2012 11:49:27
Quote Anchor link
Ja zeker heb een eigen server die netjes elke keer een backupje maakt.
En het is gelukt ik heb zelf nog een klein stukje verder gerommeld.
Dit is hem geworden.
Bedankt voor je hulp!

UPDATE
products_to_categories
INNER JOIN
products_description ON products_description.products_id = products_to_categories.products_id AND LOWER(products_description.products_name) LIKE 'b%' AND
products_to_categories.categories_id!=33 AND
products_to_categories.categories_id!=1 AND
products_to_categories.categories_id!=27 AND
products_to_categories.categories_id!=17 AND
products_to_categories.categories_id!=2 AND
products_to_categories.categories_id!=22 AND
products_to_categories.categories_id!=23 AND
products_to_categories.categories_id!=21 AND
products_to_categories.categories_id!=24 AND
products_to_categories.categories_id!=25 AND
products_to_categories.categories_id!=28 AND
products_to_categories.categories_id!=29 AND
products_to_categories.categories_id!=30 AND
products_to_categories.categories_id!=31
SET
categories_id = 39
 



Overzicht Reageren