Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL]Unikalne wartości z kolumny
i105n2k
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.08.2014

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


Witam,

mam tabelę adresy

id|wojewodztwo|miasto
---------------------------
1|podlaskie|Białystok
2|podlaskie|Ełk
3|podlaskie|Augustów
4|pomorskie|Gdynia
5|pomorskie|Tczew
6|mazowieckie|Warszawa

Chciałbym wyświetlić tabelę bez duplikowania się nazw województw tzn w kolumnie województwo tylko unikalne wartości a w kolumnie miasto wszystkie tzn. tak:

wynik

miasto|wojewodztwo
---------------------------
Białystok|Podlaskie
Ełk|
Augustów|
Gdynia|pomorskie
Tczew
Warszawa|mazowieckie

Jak to zrobić ?

http://sqlfiddle.com/#!2/71360/2
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Ale ty to chcesz wyswietlic na stronie przy pomocy php czy w czystym sql chcesz miec taki wynik?
Go to the top of the page
+Quote Post
Sephirus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Hmmm a czemu tak - Powiem szczerze, że nie łatwo jest uzyskać taki efekt - trzeba się posłużyć procedurą by go uzyskać, ewentualnie użyć zmiennej w select - tylko po co takie zabiegi? Chcesz to potem wyświetlić w takiej formie by województwa się nie powtarzały (np w HTML/PHP)? Jeśli tak to tam ignoruj powtarzające się nazwy - będzie łatwiej.
Go to the top of the page
+Quote Post
i105n2k
post
Post #4





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.08.2014

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


Docelowo chciałbym to wyświetlić w PHP jako tabelę, wiec rozwiązanie po stronie PHP jak najbardziej mnie interesuje.
Go to the top of the page
+Quote Post
Daimos
post
Post #5





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Niech zgadnę, chcesz zrobić tabelę z nagłówkami i dlatego chcesz, żeby woj. było tylko raz?
Nie zawracaj sobie tym głowy, bo jeśli o to Ci chodzi, zrób tak:
  1. $rows[] = array('woj'=>'Lubelskie', 'miasto'=>'Lublin');
  2. $rows[] = array('woj'=>'Lubelskie', 'miasto'=>'Lublin 2');
  3. $rows[] = array('woj'=>'Lubelskie', 'miasto'=>'Lublin 3');
  4. $rows[] = array('woj'=>'Mazowieckie', 'miasto'=>'Warszawa');
  5. $lastHeader = null;
  6. foreach($rows as $row)
  7. {
  8. if(!$lastHeader || $lastHeader != $row['woj'])
  9. {
  10. $lastHeader = $row['woj'];
  11. echo '<h2>'.$row['woj'].'</h2>';
  12. }
  13. echo $row['miasto'].'<br/>';
  14. }


-- zapomniałem dodać, ale chyba logiczne jest, że musisz wtedy sortować po woj. (IMG:style_emoticons/default/wink.gif)

Ten post edytował Daimos 17.09.2014, 11:25:40
Go to the top of the page
+Quote Post
i105n2k
post
Post #6





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.08.2014

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


Nie (IMG:style_emoticons/default/smile.gif) Mam tabelę z danymi różnych punktów i chciałbym uniknąć wyświetlania danych które się dublują bo to znacznie pogarsza czytelność.

Myślałem nad pętlą if która porównywałaby wartość z pola województwo w danym rekordzie z wartością z rekordu poprzedniego ale coś mi to nie wychodzi. Kombinowałem w ten sposób:

  1. <?php
  2. $wynik = mysql_query("SELECT wojewodztwo, miasto FROM adresy ORDER BY wojewodztwo")
  3. or die('Błąd zapytania');
  4.  
  5. if(mysql_num_rows($wynik) > 0) {
  6. echo "<table cellpadding=\"2\" border=1>";
  7. while($r = mysql_fetch_assoc($wynik)) {
  8. echo "<tr><td>";
  9.  
  10. if($r['wojewodztwo'] != $(r-1)['wojewodztwo'])
  11.  
  12. {
  13. echo $r['wojewodztwo'];
  14. }
  15. echo "</td>
  16. <td>".$r['miasto']."</td>
  17. </tr>";
  18. }
  19. echo "</table>";
  20. }
  21.  
  22. ?>

Może wartość z pola województwo przypisywać do zmiennej żeby w następnym powtórzeniu pętli while móc ją porównywać ?
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Dostales poprawne rozwiązanie od Daimosa. Czemu z niego nie skorzystasz ?
Go to the top of the page
+Quote Post
i105n2k
post
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.08.2014

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


Jak do rozwiązania daimosa wpleść pobranie danych z bazy ?
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #9





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


http://sqlfiddle.com/#!2/71360/16
Go to the top of the page
+Quote Post
Daimos
post
Post #10





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Przerabiasz gotowca, czy chcesz się czegoś nauczyć? ;/
Przecież w moim rozwiązaniu, wystarczy wstawić Twoją pętlę z rekordami bazy:
  1. // zamiast
  2. // foreach($rows as $row)
  3. // wstawiasz swoje:
  4. while($r = mysql_fetch_assoc($wynik))


mmmmmmmm dał Ci też rozwiązanie z zapytaniem

Ten post edytował Daimos 17.09.2014, 18:25:20
Go to the top of the page
+Quote Post
i105n2k
post
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.08.2014

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


Dzięki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 3.10.2025 - 08:38