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

    Controllo di uno stesso campo in piu' tabelle

    Ciao,

    premetto che ho 3 tabelle strutturate nel seguente modo:

    ts_utenti:

    username
    ...

    ts_registrazione:

    username
    ...

    ts_bannati:

    username
    ...

    Io, quando un utente si registra, volevo verificare se il nome utente da lui desiderato non era per caso gia' inserito in quale altra tabella. Ad. esempio perche' esiste gia' un utente con lo stesso nome oppure e' nella lista dei ban.

    Ed avevo scritto la seguente cosa:

    Codice PHP:
    // Controllo se non esiste gia'
    $query="SELECT count(*) AS tot FROM ts_utenti, ts_registrati, ts_bannati WHERE username='$username'";
    $result mysql_query($query$db);
    $row mysql_fetch_array($result)
    if(
    $row[tot]>0)
      
    $errore.="- Nome utente gia' esistente
    "

    Solo che mi da errore, quindi non funziona

    Momentaneamente ho messo la seguente soluzione, ma ormai non e' ottimale

    Codice PHP:
    // Controllo se non esiste gia'
    $query="SELECT count(*) AS tot FROM ts_utenti WHERE username='$username'";
    $result mysql_query($query$db);
    $row_1 mysql_fetch_array($result);

    $query="SELECT count(*) AS tot FROM ts_registrazione WHERE username='$username'";
    $result mysql_query($query$db);
    $row_2 mysql_fetch_array($result);

    $query="SELECT count(*) AS tot FROM ts_bannati WHERE username='$username'";
    $result mysql_query($query$db);
    $row_3 mysql_fetch_array($result);

    if((
    $row_1[tot]+$row_2[tot]+$row_3[tot])>0)
      
    $errore.="- Nome utente gia' esistente
    "

    Qualcuno potrebbe darmi una dritta per avere un'unica chiamata al database?

  2. #2
    E' sbagliato il modo in cui fai il tutto.

    L'unico controllo che devi fare è sulla tabella user perchè nelle altre tabelle ci va l'id dell'utente e non il nome!

    Si chiamano relazioni. Per ottenere il nome dall'id devi utilizzare il comando join. In questo modo ottieni quello che ti serve: cntrollare se lo user esiste con un'unica chiamata al db! Ciao!

  3. #3
    Uhm non mi sono fatto capire descrivendo le tabelle ;D

    sotto ts_bannati ci sono solo due campi

    username
    email

    ts_utenti sono quelli gia' registrati mentre i bannati non ci sono

    mentre
    ts_registrazione sono quelli che devono validare la registrazione, quindi non devono essere conteggiati sotto quelli registrati.

  4. #4
    in teoria dovresti fare un join tra le tabelle basandoti sullo username.
    Select a.username AS iscritto,b.username AS bannato, c.username AS registrato
    FROM ts_utenti AS a FULL JOIN ts_registrazione AS c ON a.username = c.username FULL JOIN ts_bannati AS b ON
    b.username = a.username;

    Ottieni una tabella con tre colonne (iscritto, bannato, registrato) se l'utente non e' in una delle tb nella colonna corrispondente ci trovi un NULL

    La query non l'ho testata ma dovrebbe rendere l'idea
    Frank Contrepois
    http://contrepois.blogspot.com
    http://www.coblan.it

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.