Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Query che non mi da un risultato univoco

    Sto cercando di far autenticare due o piu utenti con la seguente query di controllo :
    SELECT tusers.id AS id, tusers.nominativo,tusers.id_settore AS id_settore, tsettori.descrizione AS descrizione, tsedi.denominazione AS denominazione, tsedi.id AS id_sede FROM (tusers INNER JOIN tsettori ON tusers.id_settore = tsettori.perm) INNER JOIN tsedi ON tsettori.id_sede = tsedi.id WHERE tusers.username = '".$_SESSION['username']."' AND tusers.id ='".$_SESSION['id']."'"

    il problema è che mi seleziona tutti gli utenti attualmente presenti (super e super2)..... eppure nel WHERE gli arrivano correttamente i parametri "super" con il suo id "1"...perchè non mi restituisce solo lui?

  2. #2
    Prova a stampare la query e vedi cosa risolvono le variabili. Per il resto dipende da cosa hai nelle tabelle.

    echo $query....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    ho controllato e le variabili vengono risolte bene.
    Queste è l'sql del db
    CREATE TABLE `tcommesse` (
    `id` int(11) NOT NULL default '0',
    `id_user` int(11) NOT NULL default '0',
    `id_settore` int(11) NOT NULL default '0',
    `num_comm` varchar(20) NOT NULL default '',
    `cliente` varchar(30) NOT NULL default '',
    `data` varchar(20) NOT NULL default '',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM;

    #
    # Dump dei dati per la tabella `tcommesse`
    #


    # --------------------------------------------------------

    #
    # Struttura della tabella `tsedi`
    #

    CREATE TABLE `tsedi` (
    `id` int(11) NOT NULL auto_increment,
    `denominazione` varchar(30) NOT NULL default '',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=4 ;

    #
    # Dump dei dati per la tabella `tsedi`
    #

    INSERT INTO `tsedi` VALUES (1, 'SEDE DI CATANZARO');
    INSERT INTO `tsedi` VALUES (2, 'SEDE DI FORLI\'');

    # --------------------------------------------------------

    #
    # Struttura della tabella `tsettori`
    #

    CREATE TABLE `tsettori` (
    `id` int(11) NOT NULL auto_increment,
    `descrizione` varchar(15) NOT NULL default '',
    `id_sede` int(11) NOT NULL default '0',
    `perm` int(11) NOT NULL default '0',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=13 ;

    #
    # Dump dei dati per la tabella `tsettori`
    #

    INSERT INTO `tsettori` VALUES (1, 'SUPERVISORE', 1, 10);
    INSERT INTO `tsettori` VALUES (2, 'SUPERVISORE', 2, 10);
    INSERT INTO `tsettori` VALUES (3, 'Uff. Tecnico', 1, 20);
    INSERT INTO `tsettori` VALUES (4, 'Uff. Tecnico', 2, 20);
    INSERT INTO `tsettori` VALUES (5, 'Uff. Acquisti', 1, 30);
    INSERT INTO `tsettori` VALUES (6, 'Uff. Acquisti', 2, 30);
    INSERT INTO `tsettori` VALUES (7, 'Magazzino', 1, 40);
    INSERT INTO `tsettori` VALUES (8, 'Magazzino', 2, 40);
    INSERT INTO `tsettori` VALUES (9, 'Amministrazione', 1, 50);
    INSERT INTO `tsettori` VALUES (10, 'Amministrazione', 2, 50);
    INSERT INTO `tsettori` VALUES (11, 'Chiuso', 1, 60);
    INSERT INTO `tsettori` VALUES (12, 'Chiuso', 2, 60);

    # --------------------------------------------------------

    #
    # Struttura della tabella `tusers`
    #

    CREATE TABLE `tusers` (
    `id` int(11) NOT NULL auto_increment,
    `id_settore` int(11) NOT NULL default '0',
    `username` varchar(15) NOT NULL default '',
    `password` varchar(15) NOT NULL default '',
    `nominativo` varchar(50) NOT NULL default '',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=3 ;

    #
    # Dump dei dati per la tabella `tusers`
    #

    INSERT INTO `tusers` VALUES (1, 10, 'super', 'super', 'SUPERVISORE');
    INSERT INTO `tusers` VALUES (2, 10, 'super2', 'super', 'SUPERVISORE2');




    Nessun risultato: continua a selezionarmi tutti e due gli utenti.....


    io devo avere come risultato della query l'username del soggetto, il suo id, il settore di appartenenza, la sede di appartenenza, recuperando i valori dalle varie tabelle....

  4. #4
    ho provato ma non capisco quello che dici.

    Intanto la AND nel WHERE e' un doppione inutile poiche' tusers username e id sono e devono essere univoci. Ho fatto il dump che hai postato e la query del primo post con in chiaro le variabili.

    Questa la query:
    codice:
    SELECT tusers.id AS id, 
    tusers.nominativo,
    tusers.id_settore AS id_settore, 
    tsettori.descrizione AS descrizione, 
    tsedi.denominazione AS denominazione, 
    tsedi.id AS id_sede 
    FROM tusers 
    INNER JOIN tsettori ON tusers.id_settore = tsettori.perm 
    INNER JOIN tsedi ON tsettori.id_sede = tsedi.id 
    WHERE tusers.username = 'super' 
    AND tusers.id = 1
    E questa e' la risposta:
    codice:
    id nominativo  id_settore descrizione denominazione     id_sede 
    1  SUPERVISORE    10      SUPERVISORE SEDE DI CATANZARO    1 
    1  SUPERVISORE    10      SUPERVISORE SEDE DI FORLI'       2
    non capisco cosa intendi dire..... a me la risposta della query sembra corretta ... ti ripeto che volendo la AND del where e' superflua.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    ma in ogni caso non dovrebbe restituirmi tutti e due gli user ma solo uno dato che in effetti solo uno ha username "super" e password "super"...?
    anche se And è superfluo continua a darmi tutti e due gli user....

  6. #6
    Originariamente inviato da simulator
    ma in ogni caso non dovrebbe restituirmi tutti e due gli user ma solo uno dato che in effetti solo uno ha username "super" e password "super"...?
    anche se And è superfluo continua a darmi tutti e due gli user....
    perche' continui a dire tutti e due gli user????

    lo user e' uno solo (super) con due record riferiti.
    Prova ad estrarre anche tuser.username e lo vedrai da te.

    Probabilmente devi rivedere la struttura... dico a vanvera perche' non conosco scopo e dati disponibili.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    appunto non dovrebbe riferirsi a due record ma a uno solo.....Esiste un supervisore della sede di forli e uno della sede di catanzaro. Distinti e separati. Unica cosa che li accomuna è il campo perm che è 10 per tutti e 2.....entrambi hanno password = "super" ma uno ha username "super" e uno "super2"..... capito?Tutti i dati sono contenuti nell'export del db che ho postato....secondo me è un problema nato dagli INNER JOIN visto che semplificando la query in "SELECT * FROM tusers WHERE username ='super' mi restituisce un solo record (come è giusto che sia..)

  8. #8
    Non ci capiamo.... allora e' errata la query o altra valutazione.
    codice:
    SELECT * 
    FROM tusers 
    INNER JOIN tsettori ON tusers.id_settore = tsettori.perm 
    INNER JOIN tsedi ON tsettori.id_sede = tsedi.id 
    WHERE tusers.username = 'super' 
    AND tusers.id = 1
    tieni presente che l'ordine delle tabelle e':
    tusers - tsettori - tsedi
    la risposta e':
    codice:
    tusers                                      tsettori                  tsedi
    id id_settore username password nominativo id descrizione id_sede perm id denominazione 
    1  10         super    super    SUPERVISORE 1 SUPERVISORE 1         10   1 SEDE DI CATANZARO 
    1  10         super    super    SUPERVISORE 2 SUPERVISORE 2         10   2 SEDE DI FORLI'
    Valuta tu dove e' l'errore di selezione ... io non posso saperlo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    ecco dove nn ci capiamo :

    NSERT INTO `tusers` VALUES (1, 10, 'super', 'super', 'SUPERVISORE');
    INSERT INTO `tusers` VALUES (2, 10, 'super2', 'super', 'SUPERVISORE2');

    come vedi esiste un user "super" e un altro user "super2".......da come dici tu invece son tutti user con username super e password super....

  10. #10
    Originariamente inviato da simulator
    ecco dove nn ci capiamo :

    INSERT INTO `tusers` VALUES (1, 10, 'super', 'super', 'SUPERVISORE');
    INSERT INTO `tusers` VALUES (2, 10, 'super2', 'super', 'SUPERVISORE2');

    come vedi esiste un user "super" e un altro user "super2".......da come dici tu invece son tutti user con username super e password super....
    Capperi se le dura...

    Hai due user e fin qui ci siamo. Ora se verifichi la risposta alla query vedrai che lo user "super" e' correttamente associato a "due" record che rispondono alla richiesta... vediamoli????

    ON tusers.id_settore = tsettori.perm
    risponde due volte 10 = 10

    ON tsettori.id_sede = tsedi.id
    risponde una volta con 1 = 1
    risponde la seconda con 2 = 2

    WHERE tusers.username = 'super' AND tusers.id = 1
    e vero in entrambi i casi id = 1 - username = user

    come vedi lo USER e' SEMPRE lo stesso.
    Ma nella tabella cosi' come e' impostata la ricerca, ci sono DUE record che rispondono alla richiesta. Non DUE users... ma bensi' DUE record. Quindi significa due possibilita', la prima e' errata la composizione della query, la seconda il contenuto della tabella e' erroneamente con dati duplicati.

    Oppure, probabile, se vuoi autenticare lo user devi usare la sola tabella user. Poi dai privilegi assegnati a quel prescelto user andrai a verificare il suo campo d'azione autorizzato, che in questo caso sarebbero le sedi di Catanzaro e Forli'.



    that's all....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.