query inversa

Ho bisogno di fare una query che sia il contrario di questa:

SELECT DISTINCT nomeagenzia
FROM `annuncio` , agenzia
WHERE agenziaid = id_agenzia
ORDER BY `nomeagenzia'

Questa seleziona tutte le agenzie che hanno inserito annunci.

La nuova query mi deve mostrare tutte le agenzie che NON hanno inserto annunci.

Come posso fare?

 :-\

inviato 10 anni fa
stellina
X 0 X

Ciao stellina,

supponendo che il campo dove inserisci gli annunci si chiami testo_annuncio , prova a fare così:

SELECT DISTINCT nomeagenzia
FROM `annuncio` , agenzia
WHERE agenziaid = id_agenzia
AND testo_annuncio = ''
ORDER BY `nomeagenzia'

Fa' sapere...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

la query esatta è

SELECT DISTINCT nomeagenzia
FROM annuncio, agenzia
WHERE agenziaid = id_agenzia
AND annuncio.testo = ''
ORDER BY nomeagenzia

ma non mi stampa alcun risultato. Quindi non funziona

  :(

risposto 10 anni fa
stellina
X 0 X

Se esegui la query:

SELECT DISTINCT nomeagenzia,annuncio.testo
FROM annuncio, agenzia
WHERE agenziaid = id_agenzia
ORDER BY nomeagenzia

Nei risultati che ottieni, c'è qualche testo vuoto?

Se NO, allora è corretto che non stampi nulla con la query precedente...

Ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Con la query che mi hai postato per ultima stampo dei risultati. Ma quei risultati li stampavo anche con la prima query che ho postato. I risultati ottenuti riguardano tutte le agenzie che hanno inserito uno o più annunci.

Purtroppo ci sono alcune agenzie che non hanno inserito annuncio ed io non so come fare a visualizzarle.

 ::)

risposto 10 anni fa
stellina
X 0 X
Con la query che mi hai postato per ultima stampo dei risultati. Ma quei risultati li stampavo anche con la prima query che ho postato. I risultati ottenuti riguardano tutte le agenzie che hanno inserito uno o più annunci.

Ok, quello che intendevo dirti io con l'ultima query che ti ho postato, era di controllare tra i risultati ottenuti se c'era qualche testo vuoto, perchè se non ci fosse stato era logico che la prima query non avesse dato risultati...

In altri termini:

SELECT count(*) as TestoVuoto
FROM annuncio
WHERE testo = ''

Così restituisce il numero di record della tabella 'annuncio' che hanno il campo 'testo' vuoto

Purtroppo ci sono alcune agenzie che non hanno inserito annuncio ed io non so come fare a visualizzarle.

Ho provato a fare una query su due tabella di un DB che ho sul pc, e per la precisione:

SELECT DISTINCT destinazione
FROM tab1 , tab2
WHERE tab1.offerta_id = tab2.offerta_id AND tab1.struttura = ''

e mi restituisce tutti i record che hanno tab1.struttura vuoto

(Ho modificato i nomi delle tabelle per ovvi motivi  ;)...)

In definitiva, non è possibile che tutti i testi degli annunci siano valorizzati?

Magari hanno un valore di default?

(Scusa le domande, ma sto andando per tentativi dato che avendo fatto una query identica nella forma a quella che usi tu, non ho avuto problemi...)

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

scusa non mi sono spiegata bene prima. Il mio campo testo contiene sempre dei valori perchè in fase di inserimento dell'annuncio ho fatto in modo che fosse un campo obbligatorio.

A questo punto non posso usare il controllo sul testo perchè risulterà sempre "pieno".

risposto 10 anni fa
stellina
X 0 X

scusa non mi sono spiegata bene prima. Il mio campo testo contiene sempre dei valori perchè in fase di inserimento dell'annuncio ho fatto in modo che fosse un campo obbligatorio.

A questo punto non posso usare il controllo sul testo perchè risulterà sempre "pieno".

Questo potrebbe essere un problema, perchè, dato che il campo è obbligatorio, come hai detto ci sarà semrpe qualcosa dentro, giusto?

Mi servirebbe capire come gestisci tu questo fatto, ossia, se l'utente non inserisce niente gli inserisci tu qualche frase o carattere in fase di inserimento?

Oppure obblighi l'utente ad inseririci qualcosa?

Nel primo caso, se gli assegni tu un valore di default, penso basti cambiare la query iniziale con:

SELECT DISTINCT nomeagenzia
FROM annuncio, agenzia
WHERE agenziaid = id_agenzia
[B]AND annuncio.testo = 'tuo_testo_default'[/B]
ORDER BY nomeagenzia

Nel caso in cui sia l'utente ad inserire il testo, devi cercare un denominatore comune e fare:

SELECT DISTINCT nomeagenzia
FROM annuncio, agenzia
WHERE agenziaid = id_agenzia
[B]AND annuncio.testo LIKE '%testo_default_utente%'[/B]
ORDER BY nomeagenzia

CMQ scusa una cosa, non ti conviene modificare il campo del DB e metterlo NULL di default?

Perchè non ha senso lasciare un campo a NOT NULL se alla fine può essere nullo?

Così ti eviti anche grattacapi...oppure gli setti tu un valore di dafault se lo devi lasciare NOT NULL...

Sono solo consigli, poi vedi te...

ciao

Lore

risposto 10 anni fa
Lore
Lore
1
X 0 X

Io ho una tabella con tutte le agenzie e una con tutti gli annunci.

Le agenzie le inserisco tutte io. Quindi ho questa situazione:

TABELLA AGENZIA

id_agenzia | nomeagenzia | ......  (altri dati)

es.

10 | ag_pippo

55 | agpluto   

84 | a_bbbbbbb   

TABELLA ANNUNCIO

id | testo | ..... | agenziaid

es.

18 | blablabla | .... | 10

26 | ciaociao   | .... | 10

Questo vuol dire che "ag_pippo" ha inserito due annunci.

"agpluto" e "a_bbbbb"  invece non compaiono nella tabella annunci perchè non ne hanno messi. Io vorrei fare una query che mi dia come risultato: "agpluto e a_bbbbb"

 :-[ 

risposto 10 anni fa
stellina
X 0 X
SELECT nomeagenzia
   FROM agenzia
      LEFT JOIN annuncio
         ON agenzia.id_agenzia = annuncio.agenziaid
   WHERE annuncio.id IS NULL
   ORDER BY nomeagenzia

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

funziona!!

 :-*

grazie!!

risposto 10 anni fa
stellina
X 0 X

Giusto per curiosità, che differenza c'è tra queste duw query in termini di funzionalità/velocità:

SELECT DISTINCT nomeagenzia
FROM `annuncio` , agenzia
WHERE agenziaid = id_agenzia
ORDER BY `nomeagenzia'

vs

SELECT DISTINCT nomeagenzia
FROM `annuncio` 
  JOIN agenzia 
    ON agenzia.id_agenzia = annuncio.agenziaid
ORDER BY `nomeagenzia'

 :bye:

risposto 10 anni fa
Nico Colonna
X 0 X

Nessuna  :punk:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda