Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wybranie tylko niepowtarzających się wartości z tabeli
josephk
post 6.05.2014, 14:29:11
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 31.01.2008

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


Witam,
Wertuję od czasu jakiegoś dłuższego internet w poszukiwaniu zapytania które wybierze mi tylko rekordy, w których dana wartość kolumny nie została wykorystana w innych rekordach. Wszędzie trafiam na SELECT DISTINCT ale to z ząłożenia jest dla mnie bezużyteczne jako, że pokaże mi wszystkie wartości wywalając duplikaty. Ja natomiast chcę wyciągnąć wszystkie wartości KTÓRE NIE POSIADAJĄ duplikatu i TYLKO te wartości wywalając te, które duplikaty posiadają - najlepiej w ogóle by było gdybym mógł dać warunek NIE ZAWIERA a nie NIE JEST RÓWNE jako, że dokładnie chodzi mi o wyciąganie rekordów z adresami email (VARCHAR) gdzie czasem w polu są dwa lub więcej adresów. Coś jak SELECT UNIQUE choc w MySQL nie ma takiego zapytania bo UNIQUE można użyć tylko przy tworzeniu tabeli.

Oczywiście mogę to zrobić w PHP+MySQL za pomocą pętli ale uważam, że nie po to są silniki baz danych żeby kodować to w PHP.

Moje pytanie do mądrzejszych ode mnie w MySQL brzmi:
Czy istnieje (i jeżeli tak to jakie) jedno zapytanie pozwalające wyciągnąć wartości, które się nie powtarzają (lub najchętniej nie zawierają) w innych rekordach.

Ten post edytował josephk 6.05.2014, 14:31:30
Go to the top of the page
+Quote Post
KR2615
post 6.05.2014, 14:30:33
Post #2





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

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


użyj GROUP


--------------------
Go to the top of the page
+Quote Post
josephk
post 6.05.2014, 14:49:14
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 31.01.2008

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


Ok analizując opcję agregacji można faktycznie wyciągnąć rekordy bez powtórzeń
  1. SELECT
  2. LOWER(TRIM(email)),
  3. COUNT(LOWER(TRIM(email))) AS liczba_powtorzen
  4. FROM
  5. klienci
  6. WHERE
  7. email LIKE '%@%' AND
  8. email LIKE '%.%'
  9. GROUP BY
  10. email
  11. HAVING
  12. liczba_powtorzen = 1


to już pół sukcesu smile.gif

To może nieco dalej - jak to zmodyfikować żebym mógł wywalić wszystkie rekordy których wartości są sobie równe ale i te które zawierają w sobie inne?
czyli np. mamy dwa rekordy z wartościami pola email:
1) email = 'filip@filip.pl'
2) email = 'wiola@filip.pl;filip@filip.pl'
i żeby w takim przypadku nie brało pod uwagę żadnego z nich w wynikach?
Go to the top of the page
+Quote Post
Pyton_000
post 6.05.2014, 15:09:19
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Źle zaprojektowałeś BD i teraz się męczysz.
Nie trzyma się wielu wartości w jednej komórce.
Go to the top of the page
+Quote Post
josephk
post 6.05.2014, 15:29:27
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 31.01.2008

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


"Źle zaprojektowałeś BD i teraz się męczysz.
Nie trzyma się wielu wartości w jednej komórce"

I nie odpowiada się też na niezadane pytania. Nie ja projektowałem tę bazę. I tak - teraz się męczę. Jeżeli masz coś konstruktywnego do powiedzenia w temacie zadanego przeze mnie pytania to chętnie posłucham. Komentarze na tematy inne zachowaj proszę dla potomnych, może będą stawiali tak bazy, że jak ktoś będzie po nich kończył robotę to się męczyć nie będzie.
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: 26.04.2024 - 19:45