Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> COUNT() LEFT JOIN - mały problem
arpk2000
post
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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Pilsener
post
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:
  1. ...LEFT JOIN komentarze ON komentarze.idproduktu=produkty.id AND komentarze.idklienta<>$id_danego_klienta


A można dodać przecież zwykły WHERE:
  1. ...WHERE komentarze.idklienta<>$id_danego_klienta
Go to the top of the page
+Quote Post
arpk2000
post
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)
Go to the top of the page
+Quote Post
Mchl
post
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
Go to the top of the page
+Quote Post
arpk2000
post
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
Go to the top of the page
+Quote Post
Mchl
post
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
Go to the top of the page
+Quote Post
sci201
post
Post #7





Grupa: Zarejestrowani
Postów: 27
Pomógł: 1
Dołączył: 1.05.2010

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


to zapytanie
  1. SELECT produkty.id, produkty.nazwa FROM produkty LEFT JOIN komentarze ON komentarze.idproduktu=produkty.id WHERE komentarze.idklienta='$idklienta' AND komentarze.idproduktu IS NULL
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
  1. NULL
, masz ustawione w bazie
  1. NOT NULL


może to coś pomoże
Go to the top of the page
+Quote Post
Mchl
post
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
Go to the top of the page
+Quote Post
arpk2000
post
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:

  1. SELECT o.id, o.idprodukty0, o.tytul, os.id, os.cena, os.ilosc, os.dostawa, os.kosztydostawy, os.czas, os.idkupca FROM oferty_sprzedaz AS os JOIN oferty AS o ON os.idoferty = o.id LEFT JOIN (SELECT idoferty_sprzedaz AS idos FROM komentarze WHERE idklienta_kto='$idklienta') AS k ON os.id=k.idos WHERE (o.idklienci='$idklienta' || os.idkupca='$idklienta') && k.idos IS NULL
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: 24.08.2025 - 22:32