Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] znajdź rekordy, które mają te same dane w kolumnie mysql
rgrg2
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 29.08.2010

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


chcę odczytać wszystkie id rekordów które w polu usermode mają tą samą wartość
zapytanie03 działa, 02 i 01 nie
jakie zapytanie02 lub 01 w mysql będzie dobrze działać ?

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. </head>
  6.  
  7. <?php
  8.  
  9. if(!@mysql_connect("127.0.0.1", "root", ""))
  10. {
  11. echo "nie połączono z bazą";
  12. die();
  13. }
  14.  
  15. mysql_select_db("baseusers");
  16. $zapytanie01 = "select * from uzytkownicy where usermode in ( select usermode from uzytkownicy group by usermode having count(*) > 1)";
  17. $zapytanie02 = "select id from uzytkownicy group by usermode having count(*) > 1";
  18. $zapytanie03 = "SELECT * FROM uzytkownicy";
  19.  
  20. $result = mysql_query($zapytanie02);
  21.  
  22. while ($dane = mysql_fetch_array($result))
  23. {
  24. $id = $dane['id'];
  25. echo $id."<br>";
  26. }
  27.  
  28.  
  29. ?>
  30.  
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
nospor
post
Post #2





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




02 nie dziala? A jaki dostajesz blad z bazy?
Go to the top of the page
+Quote Post
rgrg2
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 29.08.2010

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


przy zapytaniu02 drukuje 1 2
zapytanie01 drukuje 1,2,3,4
a tylko rekordy z id 2,4 mają te same wartości w usermode

Go to the top of the page
+Quote Post
nospor
post
Post #4





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




A pokaz dane jakie maszz w tabeli
Go to the top of the page
+Quote Post
rgrg2
post
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 29.08.2010

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


nazwa_uz ; haslo ; email ; usermode ; id
rgrg2 ; 1qa2ws ; rgrg2@sdfsd.pl ; ; 1
rgrg22 ; 1q2w3e ; rgrg2@sdfdf.pl ; sdfsdf ; 2
rgrg222 ; 1qaz2ws ; rgrg2@asdaf.pl ; ; 3
asdasd ; sdfsdfsdf ; sdf@asdf.com ; sdfsdf ; 4
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




No i zapytanie drugie dziala tak jak mu pokazales.
rekordy 1 i 3 maja nic, czyli maja to samo wiec je grupuje i wyswietla 1
2 i 4 maja to samo wiec je grupuje i wyswietla 2.
Wszystko w zgodzie z tym co napisales w zapytaniu
Go to the top of the page
+Quote Post
rgrg2
post
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 29.08.2010

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


ale zapytanie ma drukowac 2 i 4
nie wiem jak to napisać takie zapytanie
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #8





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

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


Bza danych korzysta z algebry zbiorów, a nie "zwykłej" matematyki. Stosując IN sprawdzasz, czy w zbiorze elementów jest taki, którego porównujesz... NULL, czyli element pusty, również może być elementem zbioru. I to nastąpiło tutaj. Sprawdzasz, czy "element pusty" jest w zbiorze zawierającym m.in. "element pusty". Jest. I dlatego się pojawia. Jeśli nie chcesz, by się pojawiał musisz użyć =. każdy NULL jest różny od każdego innego NULLa.
Go to the top of the page
+Quote Post
rgrg2
post
Post #9





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 29.08.2010

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


ale jak to co napisałeś zastosować z tym zapytaniu
jak zmienić to zapytanie
$zapytanie01 = "select * from uzytkownicy where usermode in ( select usermode from uzytkownicy group by usermode having count(*) > 1)";
proszę napisz twoją wersję tego zapytania,
która ma wydrukować id 2, 4.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #10





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

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


Przecież napisałem ci wyraźnie:
masz zamienić IN na =.
= w tym przypadku to... JOIN
Zapytanie będzie wyglądać tak:
  1. SELECT * FROM uzytkownicy u JOIN ( SELECT usermode FROM uzytkownicy GROUP BY usermode HAVING count(id) > 1) x ON x.usermode=u.usermode
Go to the top of the page
+Quote Post
rgrg2
post
Post #11





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 29.08.2010

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


to zapytanie które napisałeś drukuje cyfry 1,2,3,4, a nie 2,4,

Go to the top of the page
+Quote Post
mmmmmmm
post
Post #12





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

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


Drukuje 2, 4. Albo coś źle robisz, albo coś źle mówisz.
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: 22.08.2025 - 11:58