Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] znajdź rekordy, które mają te same dane w kolumnie mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
rgrg2
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.  
nospor
02 nie dziala? A jaki dostajesz blad z bazy?
rgrg2
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

nospor
A pokaz dane jakie maszz w tabeli
rgrg2
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
nospor
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
rgrg2
ale zapytanie ma drukowac 2 i 4
nie wiem jak to napisać takie zapytanie
mmmmmmm
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.
rgrg2
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.
mmmmmmm
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
rgrg2
to zapytanie które napisałeś drukuje cyfry 1,2,3,4, a nie 2,4,

mmmmmmm
Drukuje 2, 4. Albo coś źle robisz, albo coś źle mówisz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.