problema outer join

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ciao a tutti... pensavo di conoscere il linguaggio MySql... ma mi sbagliavo... magari mi sto perdendo in un bicchiere d'acqua... ma al momento non riesco a trovare una soluzione!!!

Ho 2 tabelle
- registrati
id, nome, etc...
-annunci
id, id_registrato, pubblicato, etc..

Questi sono i campi di mio interesse...

Il problema è che devo estrarre SOLO i registrati che non hanno annunci oppure che li hanno ma con valore del campo pubblicato diverso da 1.

Ho provato con questa query:
PHP:
$query_ricerca= "SELECT * FROM annunci RIGHT OUTER JOIN registrati ON registrati.id=annunci.id_registrato WHERE annunci.pubblicato=1 GROUP BY annunci.id_registrato "

ma non ottengo l'estrazione sperata... mi estrae anche i reistrati che hanno pubblicati degli annunci...

Qualcuno mi può illuminare?
Ne ho provate anche altre ma non riesco a trovare la formula giusta.
 

stefano_c

Nuovo Utente
16 Nov 2009
4
0
0
Ciao a tutti... pensavo di conoscere il linguaggio MySql... ma mi sbagliavo... magari mi sto perdendo in un bicchiere d'acqua... ma al momento non riesco a trovare una soluzione!!!

Ho 2 tabelle
- registrati
id, nome, etc...
-annunci
id, id_registrato, pubblicato, etc..

Questi sono i campi di mio interesse...

Il problema è che devo estrarre SOLO i registrati che non hanno annunci oppure che li hanno ma con valore del campo pubblicato diverso da 1.

Ho provato con questa query:
PHP:
$query_ricerca= "SELECT * FROM annunci RIGHT OUTER JOIN registrati ON registrati.id=annunci.id_registrato WHERE annunci.pubblicato=1 GROUP BY annunci.id_registrato "

ma non ottengo l'estrazione sperata... mi estrae anche i reistrati che hanno pubblicati degli annunci...

Qualcuno mi può illuminare?
Ne ho provate anche altre ma non riesco a trovare la formula giusta.

Secondo me serve una query tipo qst:


SELECT id_registrato FROM registrati R

WHERE

--hanno annunci con valore <> 1
R.id_registrato IN SELECT id_registrato FROM ANNUNCI A1 WHERE (A1.pubblicato <> 1)


OR

--non hanno annunci
R.id_registrato NOT IN SELECT id_registrato FROM ANNUNCI A2
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Sfortunatamente la query di Alessandro non cambia la situazione, continua a estrarmi anche i registrati che hanno annunci con pubblicato=1...

SELECT id_registrato FROM registrati R

WHERE

--hanno annunci con valore <> 1
R.id_registrato IN SELECT id_registrato FROM ANNUNCI A1 WHERE (A1.pubblicato <> 1)


OR

--non hanno annunci
R.id_registrato NOT IN SELECT id_registrato FROM ANNUNCI A2

Ho provato a tradurla così, ma mi da un errore di sintassi..
PHP:
$query_ricerca= "SELECT id_registrato FROM registrati R WHERE
(R.id_registrato IN SELECT id_registrato FROM ANNUNCI A1 WHERE (A1.pubblicato <> 1))OR(R.id_registrato NOT IN SELECT id_registrato FROM ANNUNCI A2) ";

forse ho sbagliato ad interpretarla...
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Forse ci sono...
PHP:
$query_ricerca= "SELECT id FROM registrati R WHERE 
(R.id IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato <> 1))
||
(R.id NOT IN (SELECT id_registrato FROM annunci A2)) ";

Però continua ad estrarmi qualche registrato (meno di prima comunque) che ha annunci con campo pubblicato=1...
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ci sono!!

SELECT *,id FROM registrati R WHERE
(R.id NOT IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato = 1))
||
(R.id NOT IN (SELECT id_registrato FROM annunci A2))

Sembra funzionare!! bastava cambiare la formula:
R.id IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato <> 1)
con
R.id NOT IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato = 1)

Che fagiana!!
Grazie ragazzi, siete stati come sempre illuminanti!!!
 

stefano_c

Nuovo Utente
16 Nov 2009
4
0
0
SELECT *,id FROM registrati R WHERE
R.id IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato <> 1)

con

R.id NOT IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato = 1)


Salve,
non sono molto pratico di PHP e mySQL, ma a mio parere un problema nella traduzione poteva essere nel fatto che l'operatore di diseguaglianza è "!=" e non "<>".

In generale sostituire la IN con una NOT IN negando il predicato non dovrebbe dar luogo a risultati equivalenti:

la versione originale della query ha il significato di:
- seleziona i registrati che hanno almeno un annuncio col campo pubblicato diverso da 1

la versione modificata:
- seleziona i registrati che non hanno alcun annuncio con pubblicato=1

Come esempio puoi prendere un registrato che ha due articoli: uno con pubblicato=1 ed un altro con pubblicato=0 ed applicare le due query..

:)
 

stefano_c

Nuovo Utente
16 Nov 2009
4
0
0
In SQL l'operatore di negazione, che io sappia, è <>, non !=, come in PHP.

Si, credo anche io (e scusate per la minchiata scritta di fretta).

A sto punto non riesco a capire perchè:

Questo non lo prende:
R.id IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato <> 1)

.. e questo lo prende:
R.id NOT IN (SELECT id_registrato FROM annunci A1 WHERE A1.pubblicato = 1)
 
Discussioni simili
Autore Titolo Forum Risposte Data
F Problema pulsante cerca record su access Database 0
I Sto progettando nuovi siti utilizzando bootstrap e devo dire funziona bene, l'unico problema e la maschera -moz- HTML e CSS 0
K Problema form update PHP 2
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
S Problema nel ciclare un json Javascript 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
K Problema Inner join PHP 1
F firefox problema http Linux e Software 0
N Problema con position absolute e overflow HTML e CSS 4
E Problema jquery Success jQuery 2
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
E problema selezione sfumata Photoshop 2
K [PHP] Problema con variabili concatenate. PHP 1
A Problema filtro fluidifica Photoshop Photoshop 1
H Problema Bordi Scontorno Photoshop 1
O problema con query PHP 4
R Problema installazione Realtek WiFi USB rtl8821 Reti LAN e Wireless 1
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
Y Problema percorso file in rete PHP 1
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
P Problema acquisizione clienti Webdesign e Grafica 1
F NetBeans problema creazione progetto Java Windows e Software 0
M Problema con Try Catch PHP 0
C problema seo + cerco esperto SEO e Posizionamento 11
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Y Problema incolonnamento tabella PHP 7
S problema salvataggio immagini Photoshop 0
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
D problema php mysql PHP 1

Discussioni simili