![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 6.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
mam dwie tabele dla uproszczenia niech będą to:
produkty - id, nazwa komentarze - id, idproduktu, idklienta tak wygląda zapytanie na produkty które mają już komentarz danego klienta: $wynik = mysql_query ("SELECT produkty.id, produkty.nazwa FROM produkty JOIN komentarze ON komentarze.idproduktu=produkty.id WHERE komentarze.idklienta='$idklienta' ;"); i teraz potrzebuje wyświetlić wszystkie produkty, które jeszcze NIE mają komentarza od danego klienta ($idklienta) znalazłem coś z COUNT() i LEFT JOIN ale nie bardzo rozumiem jak to zastosować. Proszę o pomoc cos takiego pokazuje produkty, które nie mają jeszcze żadnego komentarza: $wynik = mysql_query ("SELECT produkty.id, produkty.nazwa, COUNT(komentarze.id) FROM produkty LEFT JOIN komentarze ON komentarze.idproduktu=produkty.id ;"); jak do tego "dorzucić", żeby pokazywało produkty bez komentarza danego klienta? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Można bezpośrednio w join:
A można dodać przecież zwykły WHERE:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 6.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
ani jeden ani drugi sposób nie działa tak jak powinien (obydwa już wcześniej próbowałem).
uparcie pokazuje tylko produkty, które nie mają żadnego komentarza (w pierwszym przypadku) lub produkty z komentarzem innego klienta (nie pokazuje produktów bez żadnego komentarza)(w drugim przypadku) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT produkty.id, produkty.nazwa FROM produkty LEFT JOIN komentarze ON komentarze.idproduktu=produkty.id WHERE komentarze.idklienta='$idklienta' AND komentarze.idproduktu IS NULL
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 6.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
niestety to też nie działa - nie pokazuje żadnych wyników
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
I nie powinno (IMG:style_emoticons/default/winksmiley.jpg)
Kod SELECT
p.id, p.nazwa FROM produkty AS p LEFT JOIN ( SELECT idproduktu AS idFROM komentarze WHERE idklienta = '$idklienta' ) AS k USING(id) WHERE k.id IS NULL Ten post edytował Mchl 13.05.2010, 20:22:40 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 1 Dołączył: 1.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
to zapytanie
może nie działać z 2 powodów 1. produktu takiego nie ma w bazie. np dodales nowy 2. nie masz żeby domyślnie ustawiało wartości na , masz ustawione w bazie
może to coś pomoże |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Nie. Nie działa po prostu daltego, że WHERE idklienta = '$idklienta' dałem w zapytaniu zewnętrznym, podczas gdy powinien być w podzapytaniu. Jak ma zwrócić cokolwiek, skoro kazałem mu wszystko odrzucać?
Ten post edytował Mchl 14.05.2010, 23:41:37 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 6.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
witam
dzięki bardzo za odpowiedz Mchl. Dzieki Tobie wszystko teraz działa jak należy. Jeszcze chyba z 2 godziny męczyłem się, żeby dostosować do właściwej bazy danych (w pytaniu to był tylko przykład) ale w końcu jest ok. ostatecznie moje zapytanie wygląda tak:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 22:32 |