MySQL - Comandă pentru a adăuga date la fiecare intrare a unei baze de date?

Îmi cer scuze dacă este o întrebare prostă sau simplă și am încercat să o caut, dar nu a reușit să găsească o soluție; Bănuiesc că pur și simplu nu cunosc numele pentru o astfel de operațiune.

Am o bază de date MySQL cu un tabel "card".

Cardurile au un cost de turnare, care poate conține între 0 și 5 culori. Vreau să actualizez fiecare intrare în tabelul de carduri pentru a include 5 coloane, fiecare câte un boolean pentru fiecare dintre culorile posibile. Așadar, am avea nevoie de un algoritm scurt, care să analizeze culorile dintr-o cartelă, apoi să aplice în mod corespunzător cele 5 valori de culoare booleene.

Îmi imaginez cum să fac acest lucru cu un script PHP, dar m-am gândit că trebuie să existe o modalitate de ao face cu MySQL pură. Mă îndoiesc sau există un nume pentru acest tip de scenariu?

0
Nu sunt clar nici ... Vom avea nevoie de mai multe informații, poți fi mai specific?
adăugat autor jcho360, sursa
Ne puteți arăta câteva exemple despre cum arată datele dvs. și care este rezultatul așteptat?
adăugat autor Daan, sursa

1 răspunsuri

Înțeleg că întrebarea dvs. înseamnă că tabelul card are în prezent o coloană numită cost de distribuție care conține un set de culori, de ex. 'roșu, verde' sau 'albastru, portocaliu, galben' și căutați o interogare care generează coloane booleene care indică dacă fiecare culoare posibilă este < costul de distribuire ?

Dacă da, FIND_IN_SET() al MySQL > ar trebui să vă dau ce faceți după:

SELECT *,
       FIND_IN_SET('red',    `casting cost`) > 0 AS red,
       FIND_IN_SET('blue',   `casting cost`) > 0 AS blue,
       FIND_IN_SET('green',  `casting cost`) > 0 AS green,
       FIND_IN_SET('orange', `casting cost`) > 0 AS orange,
       FIND_IN_SET('yellow', `casting cost`) > 0 AS yellow
FROM   card

Dacă doriți să modificați definitiv tabelul pentru a include astfel de coloane:

ALTER TABLE card
  ADD COLUMN red    BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN blue   BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN green  BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN orange BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN yellow BOOLEAN NOT NULL DEFAULT FALSE

UPDATE card SET
  red    = FIND_IN_SET('red',    `casting cost`) > 0,
  blue   = FIND_IN_SET('blue',   `casting cost`) > 0,
  green  = FIND_IN_SET('green',  `casting cost`) > 0,
  orange = FIND_IN_SET('orange', `casting cost`) > 0,
  yellow = FIND_IN_SET('yellow', `casting cost`) > 0
2
adăugat
Cred că aceasta este calea cea bună, mulțumesc! Ar fi trebuit să fiu mai clar cu "costul de turnare" - formatul ar putea fi mai mult ca "RGB" care ar fi roșu, verde și albastru. Nu există virgule, deci nu este un set corect.
adăugat autor Bing, sursa
Multumesc frumos!
adăugat autor Bing, sursa
@myingling: În acest caz, va trebui să utilizați LOCATE() în schimb: de ex LOCATE ("R", "costul de turnare")> 0
adăugat autor eggyal, sursa
MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.