Outer join che non funge

  • Creatore Discussione Creatore Discussione boberto
  • Data di inizio Data di inizio

boberto

Nuovo Utente
29 Giu 2016
2
0
1
Ciao a tutti, non riesco proprio a fare una join banale, di cui mi serve solo il numero con mysql_num_rows.

Ho due tabelle:
utenti | ricevute

Con questi e altri campi
codice | cod_ut
nome | quota
| data

Vorrei avere i numeri secchi di quanti utenti hanno pagato la quota e faccio così, ottenendo un numero verosimile:

SELECT ricevute.*, utenti.*
FROM ricevute
INNER JOIN utenti ON ricevute.cod_ut = utenti.codice
WHERE ricevute.quota != ' ' AND YEAR(primanot.data) = '$anno'";



E vorrei avere il numero secco di quanti non hanno pagato la quota e dunque di quanti sui 7000 non hanno ricevute con valorizzato il campo quota.
Sto impazzendo ma proprio non ci riesco.

Ho provato così:

SELECT *
FROM utenti
LEFT JOIN ricevute
ON utenti.codice = ricevute.cod_ut

Ebbene quando conto con mysql_num_rows, mi viene restituito un numero molto più grande degli utenti presenti (circa 7000) e quindi più simile al numero di ricevute presenti in ricevute.

Grazie a tutti per l'aiuto.
 
ciao
da dove salta fuori la primanot? è un altra tabella?
da quello che scrivi il campo data è della tabella ricevute
poi ricevute.quota != ' ' c'è uno spazio tra gli apici?
se non è valorizzato dovrebbe essere vuoto
ricevute.quota != ''
intanto questo
 
Perdonami, primanot sarebbe ricevute.

Ad ogni modo, penso di aver risolto così:

  1. Facendo prove, il numero più verosimile (oltre 6000) lo ottengo così, ma non so se sia effettivamente e logicamente corretto:

    SELECT * FROM utenti WHERE codice NOT IN (SELECT cod_ut FROM ricevute WHERE quota != ' ' AND YEAR(ricevute.data) = '$anno');

  2. Penso sia corretto, perché quando tolgo il NOT, ottengo altro numero che sommato al precedente è il numero degli utenti totali.
Sì, avevo messo sspazio solo perché temevo che non si vedessero

Grazie
 

Discussioni simili