Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: query su due tabelle

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    147

    query su due tabelle

    Ho due tabelle strutturate in questo modo:

    tabella Assegn
    id, id_schede, stato

    tabela scheda
    id, nome


    Dovrei fare una query sulla tabella Assegn e recuperare solo i record dove stato='1' ed dall'id_scheda recuperare i record nome da tabella schede.
    Codice PHP:
                    $ris mysql_query("SELECT * FROM schede,Assegn WHERE schede.id=Assegn.id_schede"
    or die(
    mysql_error());

    echo 
    "<table border='5'>";
    echo 
    "<tr> <th>Nome scheda</th> <th>---</th> <th>---</th> <th>Stato</th> <th>---</th></tr>";
    // keeps getting the next row until there are no more to get
    while($row mysql_fetch_array$ris )) {
        
    $id=$row['id'];
        
    $stato=$row['stato'];
       
        if (
    $row['stato'] =='1'){ //se stato è uguale a 1 allora mostra il nome della scheda
        
    echo "<tr><td>".$row['nome']."</td><td>&nbsp;</td><td>&nbsp;</td>";
            }
            else{ 
    //altrimenti esci
    exit();
            } 
    Eppure se ho dei record nel campo stato uguale a 1 non mi crea nessun elenco nella tabella.
    Dove sbaglio?

  2. #2
    codice:
    $ris = mysql_query("SELECT * FROM schede,Assegn 
                        WHERE schede.id=Assegn.id_schede
                        AND Assegn.stato = 1") 
            
    codice:
    or die(mysql_error());
    
    seleziona solo i record con stato = 1
    Ultima modifica di piero.mac; 12-11-2013 a 18:17 Motivo: il codice fa quello che gli pare.

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    91
    Perchè non metti nella WHERE ... AND STATO=1 ed elimini l'if? Nel tuo caso se il primo record della query è uguale a 0 non esci dallo script con l'exit()?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    147
    E' perfetto.
    In pratica nella tabella Assegn abilito o disabilito lo stato di alcuni prodotti e così facendo prelevo solo gli id della tabella Assegn che hanno stato =1 (se abilitati)
    Prelevato questi id di prodotti abilitati dovrei confrontarli con la tabella chiamata utenti_abil strutturata in questo modo:
    id, id_assegn, ut_stato, id_utente

    Cioè vedere se di questi prodotti abilitati, l'utente a sua volta è abilitato a vederli.
    ho provato in questo modo ma è stato un disastro perchè non ottengo nulla.
    Codice PHP:
            $ris mysql_query("SELECT * FROM Assegn,schede WHERE schede.id=Assegn.id_scheda AND Assegn.stato=1"
    or die(
    mysql_error());

    $ris2=mysql_query("SELECT *FROM utenti_abil WHERE qstato=1")
    $row2=mysql_fetch_array($ris2);

    while(
    $row mysql_fetch_array$ris )) {
    if(
    $row['id']=$row2['id_assegn']{
      if(
    $_Session_id== $row2['id_utente'] AND $row2['qstato']==1){
    echo
    "il prodotto è abilitato e anche l'utente è abilitato alla visione";
    }
    else{
    echo
    "il prodotto è abilitato ma l'utente non può visionarlo";
    }
    }

    Dove sbaglio?
    Qualche suggerimento?
    Premetto che di certo c'è una struttura più semplice per svolgere questo script ma le mie conoscenze sono ancora basilari e me ne scuso.
    Ultima modifica di lume70; 13-11-2013 a 18:05

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    147
    Nessuno sa aiutarmi?
    So che il problema sta qui:
    Codice PHP:
    if($row['id']=$row2['id_assegn']){ 
    Cioè nel confrontare due campi di due array, ma nn so come risolvere....

    HELP!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    91
    Credo manchi l' == nell'if cosi fa l'assegnazione non il confronto. La riga sotto l'hai scritto in modo corretto.
    Ultima modifica di Talion; 14-11-2013 a 11:25

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    147
    Niente da fare ottengo sempre una lista vuota....

    Per correttezza credo che il mio problema riguarda forse a sezione PHP più che la sezione Database.
    Forse mi conviene presentare il problema in quella sezione?

  8. #8
    E' un problema strutturale. Devi fidarti del software. E' inutile chiedere una cosa al db e poi controllare se quello che rende e' == a quello che hai chiesto.

    Perche' fai due query? dalla comparazione che fai si direbbe che anche la tabella utenti_abil abbia un riferimento tramite l'id con la tabella assegn. E allora aggiungila alla JOIN. Anche se per abilitare o meno un utente basterebbe una flag 0/1 senza scomodare una terza tabella.

    Diciamo che il problema e' di gestione del database che viene fatto tramite il php. E qui l'eterno dilemma: si tratta di php o di mysql?
    La domanda e' sempre la stessa. Siccome non hai errori dal parser diciamo che il problema e nella gestione del database.

    In ogni caso per spostare la discussione non devi aprire un thread altrove ma chiedere ad un mod di spostarti.

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

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    147
    Ok, vediamo allora se la gestione del database come l'ho impostata io è corretta.
    Riassumo brevemente il mio problema e semplifico le tabelle.
    Devo poter far vedere dei prodotti agli utenti. I prodotti li devo poter attivare o disattivare, e pure gli utenti li devo poter attivare o disattivare. Nel senso che appena il prodotto lo rendo "visibile" (stato==1) gli utenti possono visionarlo, ma una volta visionato deve diventare invisibile.

    Per cui sto lavorando su queste due tabelle
    schede
    id, nome, stato

    utenti_abil
    id, id_scheda, id_utente

    schede.stato può valere 0 (disabilitato) o 1 (abilitato)

    Pensavo di utilizzare la tabella utenti_abil per inserire l'id_scheda e l'id_utente che ha visionato, per cui ci sarà l'elenco di chi ha visto cosa e non può più visionare.
    Esempio:
    Se sono attive le schede 1 e 2 e l'utente pippo è presente nella tabella utenti_abil e nel campo id_scheda c'è 2, pippo ha già visionato la scheda con id==2 e non potrà più visionarla. Ma può visionare la 1.

    Se il principio è giusto delle tabelle e campi è giusto allora mi sto troppo confondendo con query e quant'altro per poter fare i confronti nelle due tabelle.

    help!

  10. #10
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Sposto in PHP su richiesta di lume70

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.