Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Unikalność rekordów, Jedna tabela i wyszukiwanie unikalnych rekordów
banana
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


witam,
mam tabelę (i nie może być ich więcej...) w której są
MIASTO|ULICA

NP:
KARAKÓW|KRAKOWSKA
KARAKÓW|WARSZAWASKA
KARAKÓW|ZIEMOWITA

WARSZAWA|KRAKOWSKA
WARSZAWA|WARSZAWASKA
WARSZAWA|PSZCZYŃSKA

ŁÓDŹ|KRAKOWSKA
ŁÓDŹ|WARSZAWASKA
ŁÓDŹ|ŁÓDZKA

chce wybrać powiedzmy 3 rekordy ze wszystkich, tak by miasto i ulica się nie powtarzały w wyniku zapytania
czyli naprzykład:

KARAKÓW|WARSZAWASKA
WARSZAWA|PSZCZYŃSKA
ŁÓDŹ|KRAKOWSKA

Chcę wybrać tylko unikalne rekordy zarówno pod względem miasta jak i ulicy,

próbuje grupować rekordy po mieście
  1. GROUP BY miasto
- ale wtedy jest szansa, że ulice będa takie same

dziękuję,

Banana

Ten post edytował banana 28.03.2012, 09:56:34
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


  1. SELECT DISTINCT `miasto`, `ulica` FROM `tabela`

albo
  1. SELECT `miasto`, `ulica` FROM `tabela` GROUP BY `miasto`, `ulica`

EDIT:
Nie wiem, czy kolega rozumie, co to jest unikalność rekordu. W podanym wyżej przykładzie każdy rekord jest unikalny, bo nie ma dwóch identycznych wartości zarówno w kolumnie `miasto`, jak i w kolumnie `ulica` jednocześnie.

Ten post edytował mortus 28.03.2012, 09:50:39
Go to the top of the page
+Quote Post
banana
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


dziekuję za odpowiedź (IMG:style_emoticons/default/smile.gif)
Cytat(mortus @ 28.03.2012, 10:47:30 ) *
Nie wiem, czy kolega rozumie, co to jest unikalność rekordu. W podanym wyżej przykładzie każdy rekord jest unikalny, bo nie ma dwóch identycznych wartości zarówno w kolumnie `miasto`, jak i w kolumnie `ulica` jednocześnie.

Chcę wybrać tylko unikalne rekordy zarówno pod względem miasta jak i ulicy

przepraszam może niezbyt wyraźnie to napisałem - poprawiłem opis, przy okazji czysty DISTINCT nie zadziała - sprawdzone, group by tak samo mi nie wychodzi...

Ten post edytował banana 28.03.2012, 10:06:09
Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Proponuje nadać indeks unikalny na pole miasto i ulica (jeden).
Go to the top of the page
+Quote Post
banana
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


Dziekuję za odpowiedź (IMG:style_emoticons/default/smile.gif)
Cytat(markonix @ 28.03.2012, 11:16:25 ) *
Proponuje nadać indeks unikalny na pole miasto i ulica (jeden).

hm - niestety to nie możliwe - unikalne i incrementowalne jest id

ja mam w tabeli (w której nie mogę nic zmienić):
-miasta,ulicę, i firmę - która również może sie powtarzać (np. oddziały)
-wiadomo, każde miasto może mieć tak samo nazwana ulicę
-jeśli nadam unikalny indeks - nie będę mógł wprowadzić ponownie np. tego samego miasta...

Ten post edytował banana 28.03.2012, 10:26:58
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(markonix @ 28.03.2012, 11:16:25 ) *
Proponuje nadać indeks unikalny na pole miasto i ulica (jeden).

A co ma piernik do wiatraka.
@banana: ty nie chcesz wybrać unikalnych rekordów pod względem zarówno miasta, jak i ulicy, ale chcesz wybrać takie ulice, które występują tylko w jednym mieście, a to zdecydowana różnica:
  1. SELECT `miasto`, `ulica` FROM `tabela` GROUP BY `ulica` HAVING COUNT(*) = 1
Go to the top of the page
+Quote Post
markonix
post
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Dlatego mówiłem O JEDNYM KLUCZU PODWÓJNYM czyli na dwóch kolumnach jednocześnie MIASTO + ULICA. Same miasto i sama ulica może się powtarzać.
Kluczy może być dużo, tutaj chodzi o optymalizacje oraz o zabezpieczenie przed dublowaniem rekordów, które nie powinny być zdublowane.
Go to the top of the page
+Quote Post
banana
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


Dziękuję za odpowiedź (IMG:style_emoticons/default/smile.gif)
w bazie nie ma zdublowanych rekordów miasto|ulica

ps. nadałem taki indeks (IMG:style_emoticons/default/smile.gif)

Ten post edytował banana 28.03.2012, 10:41:03
Go to the top of the page
+Quote Post
alegorn
post
Post #9





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

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


troche do bani podejscie, nie przemyslane.

nie przewidziales tego ze miasta nie sa unikatem w polsce, jest np. kilka warszaw (IMG:style_emoticons/default/smile.gif)
czysto teoretycznie moga miec takie same ulice (choc jedna) i co wtedy?

zainteresuj sie bazami GUS (terc simc etc)

j.


edit index tez do bani, bo czy w bazie mozesz miec tylko jedna firme w jednym miescie przy jednej ulicy?? jesli juz, musisz zastosowac klucz zlozony, z wiekszej ilosci kolumn.

Ten post edytował alegorn 28.03.2012, 10:50:01
Go to the top of the page
+Quote Post
mortus
post
Post #10





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(mortus @ 28.03.2012, 11:33:52 ) *
@banana: ty nie chcesz wybrać unikalnych rekordów pod względem zarówno miasta, jak i ulicy, ale chcesz wybrać takie ulice, które występują tylko w jednym mieście, a to zdecydowana różnica

Po namyśle stwierdzam, że jednak nie o to Ci chodzi. Chodzi o to, że to wybrane (a nie przeszukiwane) rekordy mają być unikalne pod względem zarówno miasta, jak i ulicy. Nie wiem, czy napisanie takiego zapytania jest w ogóle możliwe, bo wiązałoby się to z wybraniem jednego rekordu, później wybraniem drugiego rekordu i porównywaniem obydwu wybranych pod względem `miasta` i `ulicy`. Nie jest to raczej możliwe przy wykorzystaniu zwykłych zapytań, a trzeba by było napisać funkcję/procedurę korzystającą m. in. z instrukcji warunkowych MySQL. Przy czym nawet napisanie takiej procedury nie zagwarantuje Ci, że otrzymane wyniki będą zadowalające... przecież kombinacji może być baaaardzo dużo (jeśli nie nieskończenie wiele), a wszystko odbywało by się po części w sposób losowy, tj. uzależniony od pewnych specyficznych ustawień/właściwości silnika baz danych.

Ten post edytował mortus 28.03.2012, 10:51:54
Go to the top of the page
+Quote Post
markonix
post
Post #11





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Te kilka Warszaw to wsie czy wioski.
Jestem ciekaw czy faktycznie występuje taka sytuacja bo może urząd zajmujący się nadawaniem nazw ulic ma z góry założenie, że do takiej sytuacji nie może dojść.
Może nawet mają bazę z unikalnym kluczem (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
banana
post
Post #12





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


dziekuję za odp (IMG:style_emoticons/default/smile.gif)
Cytat(alegorn @ 28.03.2012, 11:47:00 ) *
nie przewidziales tego ze miasta nie sa unikatem w polsce, jest np. kilka warszaw (IMG:style_emoticons/default/smile.gif)
czysto teoretycznie moga miec takie same ulice (choc jedna) i co wtedy?

no właśnie (IMG:style_emoticons/default/tongue.gif) (zdejmuję ten indeks (IMG:style_emoticons/default/smile.gif) )

no ale pozostaje pytanie - czy da się?
Go to the top of the page
+Quote Post
mortus
post
Post #13





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Panowie, ale w ogóle nie ma o czym gadać. Weźmy przykład autora:
BAZA DANYCH
MIASTO|ULICA
KARAKÓW|KRAKOWSKA
KARAKÓW|WARSZAWASKA
KARAKÓW|ZIEMOWITA
WARSZAWA|KRAKOWSKA
WARSZAWA|WARSZAWASKA
WARSZAWA|PSZCZYŃSKA
ŁÓDŹ|KRAKOWSKA
ŁÓDŹ|WARSZAWASKA
ŁÓDŹ|ŁÓDZKA

Wynik jaki chce uzyskać autor:
KARAKÓW|WARSZAWASKA
WARSZAWA|PSZCZYŃSKA
ŁÓDŹ|KRAKOWSKA

Ale prawidłowym wynikiem będzie również:
KARAKÓW|KRAKOWSKA
WARSZAWA|WARSZAWASKA
ŁÓDŹ|ŁÓDZKA

Wątpię, aby jakikolwiek silnik bazodanowy poradził sobie z tym problemem, a wyniki będą całkowicie przypadkowe.
Go to the top of the page
+Quote Post
banana
post
Post #14





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


Dzięki (IMG:style_emoticons/default/smile.gif)
Cytat(mortus @ 28.03.2012, 11:49:00 ) *
Nie wiem, czy napisanie takiego zapytania jest w ogóle możliwe, bo wiązałoby się to z wybraniem jednego rekordu, później wybraniem drugiego rekordu i porównywaniem obydwu wybranych pod względem `miasta` i `ulicy`.


Wydaje sie, że na początek można wybrać np. 3 miasta
  1. GROUP BY miasto LIMIT 3
i do tych wyników dopasować selectem wewnętrznym ulice - ale jak - nie mam pomysłu - jedyna sprawa to php - tu raczej by się to udało - jednak 3 zapytania do bazy...

Dziękuję :|
Cytat(mortus @ 28.03.2012, 11:59:20 ) *
Wątpię, aby jakikolwiek silnik bazodanowy poradził sobie z tym problemem, a wyniki będą całkowicie przypadkowe.


rzeczywiście wyniki mogą być (na razie) przypadkowe i ja nie chcę (na razie) całej bazy łuskać w ten sposób tylko chciałbym wybrać 3 wyniki...
(oczywiście można je oznaczyć jako wybrane i nie będą brane pod uwagę przy nastepnym selekcie)


Ten post edytował banana 28.03.2012, 11:01:38
Go to the top of the page
+Quote Post
mortus
post
Post #15





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Tak, tylko co ma zadecydować o tym, jakie to będą miasta? Porządek sortowania ustalony przez system baz danych? Własne sortowanie? A co z miastami ze środka tabeli, jak je wybrać? Kombinacji może być naprawdę baaaaaaaaaaaaaardzo dużo. Załóżmy, że w pierwszym zapytaniu wybierzesz Kraków, Warszawę i Łódź. A dlaczego nie miały by to być np. Wrocław, Poznań, czy Gdańsk? Zauważ przy tym, że pozostałe wyniki (wyniki kolejnych zapytań) w obu przypadkach mogą się zdecydowanie różnić i mogą posiadać wiele kombinacji.

Doszukiwałbym się raczej błędu w założeniach projektu, aniżeli rozwiązania przedstawionego problemu.
Go to the top of the page
+Quote Post
Crozin
post
Post #16





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Da się przy pomocy czegoś takiego:
  1. SELECT o.* FROM (SELECT i.id, i.miasto, i.ulica FROM firmy AS i GROUP BY i.ulica) AS o GROUP BY o.miasto;
O ile wyniki powinny spełniać Twoje kryteria to jakie one będą same w sobie to już zupełnie inna bajka.
Go to the top of the page
+Quote Post
banana
post
Post #17





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


Cytat(mortus @ 28.03.2012, 12:10:53 ) *
Tak, tylko co ma zadecydować o tym, jakie to będą miasta?

ok - to nie istotne - ale np. ważność można określać poprzez wielkość miasta/liczbe ludności - jesli to w czymś może pomóc...
czyli zaczynamy wibierać miasta od najwiekszększego, tą samą rolę może równiez spełniać ID rekordu (IMG:style_emoticons/default/wink.gif)

Dziekuję
Cytat(Crozin @ 28.03.2012, 12:15:57 ) *
Da się przy pomocy czegoś takiego:
  1. SELECT o.* FROM (SELECT i.id, i.miasto, i.ulica FROM firmy AS i GROUP BY i.ulica) AS o GROUP BY o.miasto;
O ile wyniki powinny spełniać Twoje kryteria to jakie one będą same w sobie to już zupełnie inna bajka.

w zasadzie bardzo ok, gdyby można tu jeszcze regulować ilość wyników 3-5 to mogłoby być to (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #18





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Dodaj na końcu LIMIT?
Go to the top of the page
+Quote Post
banana
post
Post #19





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 29.09.2010

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


tak dokładnie - (IMG:style_emoticons/default/smile.gif) LIMIT
dziekuje wam bardzo - szczególnie Panu Crozin'owi (IMG:style_emoticons/default/smile.gif)
temat można uważać za zamknięty
jeszcze raz dzięki!

Ten post edytował banana 28.03.2012, 11:40:44
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: 15.09.2025 - 23:22