Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: typ danych SET ?
Forum PHP.pl > Forum > Bazy danych > MySQL
falkor
MAm pytanie.Potrzebuje by wbazie w polu byly przechowywane dwie wartosc; 1 i 2.Poniewaz maja byc jednoczesnie, typem odpowiednim bedzie set,bowiem enum dopuszcza tylko jedna wartosc ze zdefiniowanej listy.Moje pytanie jest takie:czy jesli pobierajac dane z bazy w warunku WHERE wystapi pole = '1', baza zwroci mi ten rekor nawet jesli oprocz 1 tkwi tam jeszcze 2? Prosilbym o jakis fragment kodu jak wygladaloby najprostsze zapytanie z uzyciem tego typu (SET) oraz jak modyfikowac takie pole zmieniajac tylko jedna z wartosci poprzez UPDATE.Dziekuje!!!
SongoQ
  1. SELECT pole
  2. FROM tabela WHERE pole_set = '1'


Zwroci tylko te wartosci gdzie jest 1

  1. UPDATE tabela
  2. SET pole_set = '2'
  3. WHERE id = ...
falkor
no tak ale jak np mam w takim polu 1 i 2 i teraz UPDATE'em chce zmienic 2 na 3 to czy 1 wciaz tam bedzie i skad on wie ze chce zmienic 2 na 3 a nie 1 na 3? W polu zawsze musi byc 1 i inna liczba ktora zmieniam...czy to sie da zrobic tym typem?
SongoQ
  1. UPDATE tabela
  2. SET pole_set = '1, 2'
  3. WHERE ............


Pole set modyfikujac musisz podac wszystkie wartosci
falkor
Nie chce dzialac...
Mam taka kwerende
  1. SELECT KwotaLokaty,RodzajLokaty,DataZalozeniaLokaty
  2. FROM logowanie,klienci_konta,lokaty WHERE Identyfikator = '".$_SESSION['MM_Username']."' AND Haslo = '".$_SESSION['MM_UserPassword']."' AND StatusLokaty = '".$StatusLokaty."' AND logowanie.NrKlienta = klienci_konta.NrKlienta AND klienci_konta.NrKonta = lokaty.NrKonta


$StatusLokaty przyjmuje 1 lub 2 lub 3 lub 4

w bazie tkwia trzy rekordy z wartosciami pola typu set rownymi 1,2.
Wlecialy tam ta oto kwerenda:
  1. INSERT
  2. INTO lokaty VALUES(NULL,'".$NrKonta."','".$KwotaLokaty."','".$RodzajLokaty."','".$RodzajOprocentowania."',
  3. '".$OkresLokaty."','".$SposobZadysponowaniaLokata."','".$DataZalozeniaLokaty."','".$Zleceniodawca."','1,2')";


Prosze o pomoc bo nie wiem co jest zle...
SongoQ
Wyciagasz tak samo jak wkladales rekordy.

  1. SELECT pole
  2. FROM tabela WHERE pole_set = '1,2' AND .............


Hm moze jest inny sposob ale nie chce mi sie szukac w manualu, bo tak naprawde to typ set jest to raczej wymysl MySQLa


----------
No i zachcialo mi sie i znalazlem:

  1. SELECT pole
  2. FROM tabela WHERE FIND_IN_SET('1', pole_set) > 0 AND .........
falkor
No bingo a ja chcialbym wyciagnac po samej 1 albo 2 a nie po zestawie '1,2' bo to mnie nie uzadzi sad.gif...jesli sie da to prosze napisz....
jakkolwiek Dzieki
SongoQ
No wlasnie Ci odpisalem w powyzszym poscie.

A tu masz link do dokumentacji http://dev.mysql.com/doc/mysql/en/set.html
falkor
Dzieki smile.gif WIELKIE DZIEKI

P.s. Ciekawe ze tej funkcji nie moge uzyc gdyz wyskakuje blad jakiejs zbieznosci latin 1 i latin 2...(moge Ci go zacytowac jesli CIe to interesuje)...dopiero drugi sposob z LIKE dziala choc nie jest idealny to wystarczy na moje potrzeby...

a zreszta: "ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and
(latin2_general_ci,IMPLICIT) for operation 'find_in_set'"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.