Update in baza de date

Salut … se poate face update in baza de date in continuare ?

Mai exact am tabelul produs cu coloana id,titlu,poza,idprodus
verific produsele vad ca produsul ce exista in baza de date are poze noi… as vrea sa pastrez prima poza si sa le adaug si pe cele noi prin UPDATE SET poza
ma puteti ajuta ?

link-urile la poza sa vina de forma link1,link2,link3

1 Like

Teoretic pentru poze ar trebuii să ai un tabel separat, produs_poza cu coloanele Id, Idprodus,nume_poza , iar la update , faci delete din produs_poza după Idprodus și le inserezi din nou

1 Like

Teoretic , practic am făcut așa !

Și as vrea sa păstrez link1 din coloana poza și pe lângă ea sa adaug și link2 , link3 etc ! Asta e cerința mea :partying_face:

2 Likes

Trebuie sa ai un separator (virgulă,&, orice) ceva ce sa nu fie în denumirea pozei între link1, link2…etc, când parcurgi coloana poza, spargi stringul după separator și devine array, de acolo compari fiecare element cu noile link-uri, daca nu le găsești în array le ștergi și le adaugi pe cele noi, pe urmă din array faci string tot cu separator între linkuri și le salvezi

Implode, explode pt PHP

2 Likes

Ideea ea ca link1 nu se mai gaseste in noua interogare…gasesc link2,link3 dar eu vreau sa pastrez si link1…cum fac…asta zic…

de exemplu la hits daca vrei sa pui ceva in plus pui hits=hits+1; ceva de forma asta as vrea si eu , dar sa complete link1, cu link2, si link3,

Nu sunt sigur dacă am înțeles. Există un tabel separat pentru poze sau nu ? Dacă da, atunci asta ai nevoie:

DELETE FROM
	images_table
WHERE
	product_id = 1234
AND
	image_id != (
		SELECT
			MIN(image_id)
		FROM
			images_table
		WHERE
			product_id = 1234
	)

Query-ul de mai sus va șterge toate imaginile pentru produsul cu id-ul 1234, cu excepția MIN(image_id), care va conține prima imagine inserată vreodată pentru produsul 1234.

Asta pare că ceri.

Dacă de fapt ai toate link-urile într-o singură coloană, atunci fă tabel separat, pentru că nu e o idee bună să concatenezi string-uri de forma asta într-o coloană (e bad practice).

1 Like

Când rulezi un UPDATE pe baze data nu trebuie sa actualiezi toate field-urile, ci doar cele pe care le vrei.


UPDATE tabela SET link2='blabla.jpg' WHERE id=2

UPDATE tabela SET link2=‘blabla.jpg’ WHERE id=2 daca dau asa imi sterge ce aveam inainte in link2 si imi baga blabla.jpg

Eu vreau sa pastrez ce aveam inainte si in continuare in coloana sa apara “ceeravechi,blabla.jpg,blabla2.jpg,blabla3.jpg”

M-am facut inteles acum , oare ?!

Dacă intenționezi să continui cu programarea, să-ți pui o alarmă pentru anul viitor, să-ți aducă aminte de subiectul ăsta. Cel puțin teoretic, în momentul ăla ar trebui să primesc dislike chiar de la tine, pentru că am postat o soluție neortodoxă.

UPDATE
	products
SET
	product_images = CONCAT(
		SUBSTRING_INDEX(product_images, 'promitcavoifolosistringulastacaseparatorsicanuvafifolositniciodataindenumireauneiimagini', 1),
		IF(
			TRIM(product_images) = '',
			'',
			'promitcavoifolosistringulastacaseparatorsicanuvafifolositniciodataindenumireauneiimagini'
		),
		'test.jpg'
	)
WHERE
	product_id = 1234

poftim, mai bine asa :slight_smile:

UPDATE products 
      SET product_images = replace(product_images, 'cacat_old', 'cacat_new')
WHERE product_id = 1234
2 Likes

atunci, inainte sa faci update, citesti ce se afla pe coloana respectiva si adaugi la noile poze la poza existenta intr-un array. Ulterior array-ul il transformi in string. Dar cum spuneai si colegii, cel mai bine e sa tii in tabela diferita pozele.

1 Like

El vrea sa faca append…
Cauta CONCAT.

3 Likes

Ce vrei tu se poate, doar că nu este corect. Pune pozele intr-un tabel separat, sau pune-le intr-un folder (poti folosi ca denumite id-ul produsului) si in tabela pui doar poza principala.

Daca totusi vrei sa continui cu ideea ta, inainte de update, proceseaza continutul pe care vrei sa-l salvezi:

  • explodeaza continutul curent intr-un array
  • adauga continutul nou in array
  • filtreaza noul array ca sa elimini pozele duplicat ( array_unique, array_filter)
  • concateneaza valorile
  • salveaza

Poti face si direct (ca la hits) dar te poti trezi cu poze duplicat:

SET poza = CASE 
        WHEN LENGTH(poza) > 0 THEN CONCAT(poza, ',link2,link3')
        ELSE 'link2,link3'
    END
4 Likes