Update coloana Mysql cu lista de cifre

Salut! Am acest cod:

$db->query(sprintf("UPDATE albums_lists SET photos_list = %s WHERE id = %s", secure($photo_id), secure($id) )) or _error("SQL_ERROR_THROWEN");

Incerc sa adaug in albums_lists in coloana photos_list valoarea lui $photo_id dar nu vreau sa sterg valorile deja existente.
$photo_id contine intotdeauna o singura valoare (exemplu 15)

in photos_list vreau sa stochez valorile in modul acesta: 10,15,2 dar nu vreau sa se repete.

Cum as putea face asta?

Eu cred că ai o structură a bazei de date greșită, în care legi id-ul imaginilor de albume. Ce se întâmplă cu un album atunci când ștergi o imagine?

Ai două variante:

one to many

Situația asta este OK atunci când ești absolut sigur că o imagine poate fi într-un singur album. Altfel spus, ai albumul (one) și imaginile (many).

Pentru a face treaba asta, la imagini adaugi o coloană extra (e.g. album) și de fiecare dată când vrei să afișezi imaginile dintr-un album, faci ceva de genul: SELECT * from photos_list WHERE album = 10

many to many

A doua variantă este când o imagine poate fi în mai multe albume (și, evident, un album poate avea mai multe imagini)

Pentru asta ai nevoie de un tabel extra (se numește tabel pivot) și are o structură de forma:

photo_id album_id

Să-i zicem photo_album_pivot .

Ca să afișezi imaginile dintr-un album trebuie să înțelegi un pic cum funcționează JOIN în SQL Uite un exemplu de query:

select photo.id, photo.username, album.name
from photos photo
  left join photo_album_pivot p on photo.id = p.photo_id
  left join albums_list album on p.album_id  = album.id
where album.id = 10
3 Likes

Pe lângă ce a zis @iamntz, dacă vrei să intri mai adânc în proiectarea bazelor de date, poate te ajută: SQL X to Y. Sau, ceva mai general:

1 Like

Un alt lucru care este un must si pe care trebuie sa il inveti este sa folosesti prepared statements

2 Likes