Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> unikalne dane z 2 pol
veyron
post 4.09.2012, 14:43:47
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
bpskiba
post 4.09.2012, 14:48:28
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


SELECT DISTINCT......
Go to the top of the page
+Quote Post
veyron
post 4.09.2012, 15:00:39
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
bpskiba
post 4.09.2012, 15:37:50
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


  1. SELECT DISTINCT * FROM
  2. (
  3. SELECT waluta_sprzedazy FROM tabela
  4. UNION
  5. SELECT waluta_kupna FROM tabela
  6. ) AS www

Go to the top of the page
+Quote Post
veyron
post 4.09.2012, 17:04:56
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
bpskiba
post 4.09.2012, 19:04:34
Post #6





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
sazian
post 4.09.2012, 19:25:33
Post #7





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


ale kombinacja biggrin.gif
  1. SELECT *
  2. FROM tabele
  3. GROUP BY concat( waluta_kupna, waluta_sprzedazy )
Go to the top of the page
+Quote Post
veyron
post 5.09.2012, 08:18:05
Post #8





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował veyron 5.09.2012, 08:19:08
Go to the top of the page
+Quote Post
vermis
post 5.09.2012, 09:20:10
Post #9





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


Cytat(sazian @ 4.09.2012, 20:25:33 ) *
ale kombinacja biggrin.gif

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


--------------------
Go to the top of the page
+Quote Post
bpskiba
post 5.09.2012, 10:43:05
Post #10





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
veyron
post 5.09.2012, 19:07:34
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
bpskiba
post 6.09.2012, 11:54:51
Post #12





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
veyron
post 6.09.2012, 20:16:18
Post #13





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


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') ;

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 04:04