Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: unikalne dane z 2 pol
Forum PHP.pl > Forum > Bazy danych > MySQL
veyron
witam
jak pobrac dane z 2 pol, ale tak zeby w wyniku otrzymac dane unikalne ? wyjasnie na przykladzie o co mi chodzi:
tabela ma pola (miedzy innymi): waluta_kupna, waluta_sprzedazy. wartosciami kazdego z nich sa np. pln, eur, usd itd.
i teraz mam nastepujacy przypadek wartosci rekordow:

waluta_kupna, waluta_sprzedazy
eur, pln
eur, usd
pln, pln
pln, chf
eur, eur

w wyniku zapytania chcialbym otrzymac spis wszystkich walut, czyli eur, usd, pln, chf. jak powinno wygladac zapytanie ?
bpskiba
SELECT DISTINCT......
veyron
Cytat(bpskiba @ 4.09.2012, 13:48:28 ) *
SELECT DISTINCT......

kombinowalem i z distinct i z group by i za wiele mi z tego nie wyszlo, wiec jesli mozna to poprosze bardziej konkretnie

dla przykladu cos takiego
  1. SELECT DISTINCT waluta_sprzedazy, waluta_kupna
  2. FROM tabela

zwraca mi unikalne pary danych w stylu
eur, pln
eur, usd
bpskiba
  1. SELECT DISTINCT * FROM
  2. (
  3. SELECT waluta_sprzedazy FROM tabela
  4. UNION
  5. SELECT waluta_kupna FROM tabela
  6. ) AS www

veyron
Cytat(bpskiba @ 4.09.2012, 14:37:50 ) *
  1. SELECT DISTINCT * FROM
  2. (
  3. SELECT waluta_sprzedazy FROM tabela
  4. UNION
  5. SELECT waluta_kupna FROM tabela
  6. ) AS www

no na union to bym chyba nie wpadl, dzieki za pomoc smile.gif
bpskiba
Paradoksalnie w tym konkretnym przykładzie DISTINCT można pominąć, gdyż jest on dokładany automatycznie gdy użyty zostanie UNION
więc
  1. SELECT * FROM
  2. (
  3. SELECT waluta_sprzedazy FROM tabela
  4. UNION
  5. SELECT waluta_kupna FROM tabela
  6. ) AS www

pokaże te same wyniki smile.gif
to taka złośliwość mysql
sazian
ale kombinacja biggrin.gif
  1. SELECT *
  2. FROM tabele
  3. GROUP BY concat( waluta_kupna, waluta_sprzedazy )
veyron
Cytat(bpskiba @ 4.09.2012, 18:04:34 ) *
Paradoksalnie w tym konkretnym przykładzie DISTINCT można pominąć, gdyż jest on dokładany automatycznie gdy użyty zostanie UNION
więc
  1. SELECT * FROM
  2. (
  3. SELECT waluta_sprzedazy FROM tabela
  4. UNION
  5. SELECT waluta_kupna FROM tabela
  6. ) AS www

pokaże te same wyniki smile.gif
to taka złośliwość mysql

sprawdzilem, zgadza sie smile.gif

Cytat(sazian)
ale kombinacja
  1.  
  2.  
  3. SELECT *
  4.  
  5. FROM tabele
  6.  
  7. GROUP BY concat( waluta_kupna, waluta_sprzedazy )

to zapytanie daje inne wyniki, bez podzapytan sie chyba nie da, bo tu jest potrzebny jakby iloczyn logiczny wynikow z 2 pol w 1 tabeli
vermis
Cytat(sazian @ 4.09.2012, 20:25:33 ) *
ale kombinacja biggrin.gif

Powiedziałbym, że prawidłowe rozwiązanie problemu.
bpskiba
hehehe

idąc dalej wcześniejszym tropem: skoro distinct jest dokładany automatycznie, to dlaczego nienapisać po prostu:
  1. SELECT waluta_sprzedazy FROM tabela
  2. UNION
  3. SELECT waluta_kupna FROM tabela


I tym sposobem w sposób prosty i przejrzysty otrzymamy właściwe wyniki
veyron
Cytat(bpskiba @ 5.09.2012, 09:43:05 ) *
hehehe

idąc dalej wcześniejszym tropem: skoro distinct jest dokładany automatycznie, to dlaczego nienapisać po prostu:
  1. SELECT waluta_sprzedazy FROM tabela
  2. UNION
  3. SELECT waluta_kupna FROM tabela


I tym sposobem w sposób prosty i przejrzysty otrzymamy właściwe wyniki

no chyba jednak sa inne wyniki,
w tym przypadku wynikiem jest iloczyn logiczny, czyli pokazywane sa tylko te, ktore sa zarowno w polu waluta_kupna jak i waluta_sprzedaz
natomiast w zapytaniu w postach powyzej wynikiem jest suma, czyli te ktore sa w waluta_kupna oraz te ktore sa w waluta_sprzedaz

dla przykladu dla danych:
waluta_kupna, waluta_sprzedazy
eur, pln
eur, usd
pln, eur

wynikiem zapytania w cytacie jest eur, pln
a wynikiem zapytania z wczesniejszego postu jest eur, pln, usd
bpskiba
dobrze, że dyskutujesz, bo musiałbym kłucić się dalej sam, ze sobą smile.gif


  1. CREATE TABLE `tabela` (
  2. `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `waluta_kupna` varchar(6) DEFAULT NULL,
  4. `waluta_sprzedazy` varchar(6) DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. );
  7. INSERT INTO `tabela`(`waluta_kupna`,`waluta_sprzedazy`) VALUES ('eur','pln'),('eur','usd'),('pln','eur');
  8.  
  9. SELECT waluta_sprzedazy FROM tabela
  10. UNION
  11. SELECT waluta_kupna FROM tabela


Wynik: pln, usd,eur
czyli taki sam jak w poprzednich zapytaniach smile.gif
veyron
Cytat(bpskiba @ 6.09.2012, 10:54:51 ) *
dobrze, że dyskutujesz, bo musiałbym kłucić się dalej sam, ze sobą smile.gif


  1. CREATE TABLE `tabela` (
  2. `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `waluta_kupna` varchar(6) DEFAULT NULL,
  4. `waluta_sprzedazy` varchar(6) DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. );
  7. INSERT INTO `tabela`(`waluta_kupna`,`waluta_sprzedazy`) VALUES ('eur','pln'),('eur','usd'),('pln','eur');
  8.  
  9. SELECT waluta_sprzedazy FROM tabela
  10. UNION
  11. SELECT waluta_kupna FROM tabela


Wynik: pln, usd,eur
czyli taki sam jak w poprzednich zapytaniach smile.gif

no dobra masz racje,
ale w takim razie jest dziwna rzecz, bo testowalem to na troche innej tabeli, ktora ma jeszcze inne pola niz waluta_kupna i waluta_sprzedazy i troche wiecej danych, testowalem to w phpmyadmin w zakladce sql i tam w wyniku tego zapytania dostawalem tylko eur i pln (a powinno byc eur,pln,czk), ale jak to teraz przetestowalem po prostu przez php to w wyniku dostaje eur, pln, i czk.
powodem jest chyba to, ze phpmyadmin dodaje automatycznie do zapytania LIMIT 0,30 i w przypadku tego zapytania nie wyswietla wszystkich wynikow i w dodatku nie dzieli tez na podstrony, natomiast w przypadku zapytania w twoim pierwszym poscie wszystko wyswietlal ok. swoja droga to pokazuje, zeby lepiej testowac przez skrypt ph, a nie phpmyadmin.
gdybys chcial to sobie przetestowac to ponizej umieszczam dane, zaimportuj do czystej tabeli i zobacz roznice w tych zapytaniach:

  1. SELECT waluta_sprzedazy
  2. FROM tabela
  3. UNION
  4. SELECT waluta_kupna
  5. FROM tabela
  6. LIMIT 0 , 30


  1. SELECT *
  2. FROM (
  3. SELECT waluta_sprzedazy
  4. FROM tabela
  5. UNION
  6. SELECT waluta_kupna
  7. FROM tabela
  8. ) AS www
  9. LIMIT 0 , 30


  1. INSERT INTO `tabela` (`id`, `waluta_kupna`, `waluta_sprzedazy`) VALUES (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'eur', 'eur'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'pln', 'pln'), (NULL, 'czk', 'pln'), (NULL, 'czk', 'eur') ;

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-2025 Invision Power Services, Inc.