Visualizzazione risultati 1 fino 8 di 8

Discussione: Query complicata

  1. #1
    Guest

    Predefinito Query complicata

    Salve , mi chiedevo se era possibile mettere in una query una condizione falsa utilizzando i dati di un altra tabella!
    Mi spiego meglio:
    In una tabella ho i nomi utenti degli iscritti nel sito.
    In una seconda tabella gli id degli utenti iscritti in alcuni gruppi.

    Ora volevo fare la ricerca di tutti gli utenti che non fanno parte di un dato gruppo.
    Come faccio? XD
    Questa è la query che devo modificare x tale scopo:

    Codice PHP:
    $sql = "select * from utente where utente.nome LIKE '%$suddivisa[0]%' or utente.cognome LIKE '%$suddivisa[0]%' or utente.nome LIKE '%$suddivisa[0]%' or utente.cognome LIKE '%$suddivisa[0]%'";
    Grazie x l'aiuto che mi darete :)

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Occhio alle variabili composte nel PHP della tua query, devono essere racchiuse tra parentesi graffe...

    Rispondo alla tua domanda, anche se in modo un po' vago perché servirebbe conoscere più in dettaglio la struttura delle due tabelle. Ci sono due casi da considerare:
    - devi confrontare il gruppo con un unico valore a te noto? Allora in questo caso è sufficiente una JOIN e un confronto diretto sul campo del gruppo
    - devi invece verificare che il gruppo rientri (o meno) in un insieme di valori? Puoi usare l'operatore [NOT] IN (subquery), dove con la subquery specifichi l'insieme di valori che può (o non deve) assumere il valore del gruppo perché il record sia selezionato.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Per essere più chiaro metto le strutture delle due tabelle che mi interessano.
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `utente` (
    `
    id_utente` int(100) NOT NULL AUTO_INCREMENT,
    `
    nome` varchar(20) NOT NULL DEFAULT '',
    `
    cognome` varchar(30) NOT NULL DEFAULT '',
    `
    nickname` varchar(50) NOT NULL DEFAULT '',
    `
    email` varchar(100) NOT NULL DEFAULT '',
    `
    data_nascita` date NOT NULL DEFAULT '0000-00-00',
    `
    regione` varchar(100) NOT NULL,
    `
    citta` varchar(100) NOT NULL,
    `
    anno` int(4) NOT NULL,
    `
    mese` int(2) NOT NULL,
    `
    giorno` int(2) NOT NULL,
    `
    data_iscrizione` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `
    acc_regolamento` char(2) NOT NULL DEFAULT '',
    `
    pwid` varchar(100) DEFAULT NULL,
    PRIMARY KEY (`id_utente`),
    UNIQUE KEY `nickname` (`nickname`,`email`),
    UNIQUE KEY `nickname_2` (`nickname`),
    FULLTEXT KEY `pwid` (`pwid`)
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;


    CREATE TABLE IF NOT EXISTS `membri_comitiva` (
    `
    id_membro` int(100) NOT NULL AUTO_INCREMENT,
    `
    id_comitiva` int(100) NOT NULL,
    `
    iscrizione` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `
    id_utente` int(100) NOT NULL,
    PRIMARY KEY (`id_membro`)
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=40 ;
    Dunque spiego meglio . Ho un form con autocomplete, dove la query originale mi trova gli utenti mediante nome e cognome che inserisco poco a poco e fino a qui funziona perfettamente.
    Ora voglio che mi trovi gli utenti che non facciano parte della comitiva che ha per esempio id_comitiva = 1 , id che già conosco e non devo estrapolare.
    Quindi avendo questa informazione devo scrivere una query che mi restituisca tutti gli utenti che non facciano parte di quella comitiva.

    Spero di essere stato più chiaro e di aver messo tutte le informazioni necessarie :)
    Grazie :)

  4. #4
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    come ti è stato suggerito, puoi fare un join, tipo:
    select * from utente natural join membri_comitiva where id_comitiva != 'x'
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    La query di @Xsescott ti restituirà (tra gli altri) anche gli utenti della comitiva "X", se questi fanno parte anche di altre comitive. Se non è questo ciò che desideri, devi scrivere questa query:
    Codice:
    SELECT *
    FROM UTENTE
    WHERE id_utente NOT IN (
       SELECT id_utente
       FROM membri_comitiva
       WHERE id_comitiva = 'X'
    );
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    Guest

    Predefinito

    xD scusa ho un ultimo problemino xD
    Ho creato la query

    Codice PHP:
    "select * from utente where id_utente NOT IN ( SELECT id_utente FROM membri_comitiva WHERE id_comitiva = '$id') and nome LIKE '%$suddivisa[0]%' or cognome LIKE '%$suddivisa[0]%' or nome LIKE '%$suddivisa[1]%' or cognome LIKE '%$suddivisa[1]%'";
    Ma mi da come output lo stesso tutti gli utenti, mentre se la modifico così

    Codice PHP:
    "select * from utente where id_utente NOT IN ( SELECT id_utente FROM membri_comitiva WHERE id_comitiva = '$id')
    senza specificare i campi nome e cognome mi trova solo gli utenti che non fanno parte di quella comitiva. Come posso risolvere? Ho sbagliato a sistemare le condizioni?
    Grazie x l'aiuto che mi state dando :)

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Prova a mettere un paio di parentesi prima e dopo le condizioni legate dagli "OR"... forse con quelle stai "allargando troppo le maglie del filtro".

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    funziona ora *___* grazie dementealsite <3 sei stato gentilissimo e molto paziente :)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •