Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854

    Query semplice ma non funzionante...

    Ragazzi...ho creato il seguente codice per interrogare un db su due tabelle...ma il risultato non e' per niente che mi aspetto...o meglio mi da risultati (forse corretti) ripetuti molte volte come mai? Dove sta l'errore?

    Dalla tabella "utentibase" prendo come campi...cognome e tipo
    Dalla tabella "immobili" prendo come campi...nome (dell'alloggio)
    Faccio un select immobili.* e utentibase.* perchè mi servono per poi stampare i dati
    Codice PHP:
            //Presi da un form! Li prende ed e' ok!
        
    $cognome="$_POST[cognom]";
        
    $nome="$_POST[alloggio]";
        
    $tipologia="$_POST[tipologia]";
        
            
    //Il campo tipologia e' impostato come obbligatorio...ed e' ok!
        
    $query='';
        if (
    $tipologia=='Entrambe le tipologie'){
            if (
    $cognome!=''){
                
    $query.="AND utentibase.cognome='$cognome' ";}
            if (
    $nome!=''){
                
    $query.="AND immobili.nome='$nome' ";}
        
    $ins=mysql_query("SELECT utentibase.*,immobili.* FROM utentibase INNER JOIN immobili ON utentibase.tipo!='' $query") or die (mysql_error());}
        else{
        if (
    $tipologia!=''){
        if (
    $cognome!=''){
            
    $query.="AND utentibase.cognome='$cognome' ";}
        if (
    $nome!=''){
            
    $query.="AND immobili.nome='$nome' ";}
        
    $ins=mysql_query("SELECT utentibase.*,immobili.* FROM utentibase INNER JOIN immobili ON utentibase.tipo='$tipologia$query") or die (mysql_error());}} 

  2. #2
    no, decisamente non hai capito cosa sono le JOIN.
    Una join lega due tabelle in base a due loro campi. Per farti un esempio che potrebbe essere il tuo:

    Tabella utentibase ha un campo id, tabella immobili ha un campo id_utente, che è uguale all'utente al quale l'immobile appartiene. A questo punto fai:

    SELECT * FROM utentibase AS u INNER JOIN immobili AS i ON i.id_utente = u.id WHERE ...

    Il ritorno sarà una lista di righe composta ciascuna dai campi di tutte le due tabelle tali che descriva un immobile con i dati dell'utente che lo possiede.

  3. #3
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    Hai ragione...scusami per il madornale errore...

    Adesso ho fatto così...
    Codice PHP:
        $query='';
        if (
    $tipologia=='Entrambe le tipologie'){
            if (
    $cognome!=''){
                
    $query.="AND utentibase.cognome='$cognome' ";}
            if (
    $nome!=''){
                
    $query.="AND immobili.nome='$nome' ";}
        
    $ins=mysql_query("SELECT utentibase.*,immobili.* FROM utentibase INNER JOIN immobili ON utentibase.user=immobili.user WHERE utentibase.tipo!='' $query") or die (mysql_error());}
        else{
        if (
    $tipologia!=''){
        if (
    $cognome!=''){
            
    $query.="AND utenti.cognome='$cognome' ";}
        if (
    $nome!=''){
            
    $query.="AND imm.nome='$nome' ";}
        
    $ins=mysql_query("SELECT DISTINCT * FROM utentibase AS utenti INNER JOIN immobili AS imm ON utenti.user=imm.user WHERE utenti.tipo='$tipologia$query") or die (mysql_error());}} 
    Però...mi da un errore...
    Se trova nella tabella utenti l'utente 'angelo' e la tabella immobili contiente 13 campi 'angelo' come user...lui come risultati mi stampa 13 volte la stessa cosa!
    Io vorrei farla stampare solo una volta, in quanto solo la scheda dell'utente mi da anche l'elenco degli immobili inseriti da "angelo".

  4. #4
    allora devi fare due query, una con tutti gli utenti, poi l'altra, per ogni utente, ottieni gli immobili con username = '".$utente['nome']."'

  5. #5
    Utente bannato
    Registrato dal
    Nov 2007
    residenza
    Acicatena (Catania)
    Messaggi
    1,854
    uhm..non ho capito benissimo...
    La query 1 rimane sempre queste?
    Codice PHP:
        if ($tipologia=='Entrambe le tipologie'){
            if (
    $cognome!=''){
                
    $query.="AND utentibase.cognome='$cognome' ";}
            if (
    $nome!=''){
                
    $query.="AND immobili.nome='$nome' ";}
        
    $ins=mysql_query("SELECT utentibase.*,immobili.* FROM utentibase INNER JOIN immobili ON utentibase.user=immobili.user WHERE utentibase.tipo!='' $query") or die (mysql_error());} 
    Come campo obbligatorio del form ho impostato la tipologia...che può essere "inserzionista" o "privato"...
    Un privato non inserisce immobili..e in tal caso la query non mi torna niente!
    La seconda query come dovrei impostarla? Potresti spiegarmi meglio?
    Grazie!

  6. #6
    Allora, la prima fai solo:

    SELECT * FROM utentibase

    poi ottieni i result e per OGNI result fai:
    Codice PHP:
    $user//Metti di avere qui la riga con i dati dell'utente
    $tipo//Metti di avere qui il tipo scelto nella form

    if($tipo == 'inserzionista')
    {
      
    //Esegui la query e stampi i risultati di "SELECT * FROM immobili WHERE user = '".$user['user']."'";


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 © 2026 vBulletin Solutions, Inc. All rights reserved.