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

    [PHP - MySQL] query random che esclude uno score

    Ciao a tutti

    sto costruendo un sito in cui gli utenti possono registrarsi e fare amicizie (tipo facebook per intenderci )

    appena loggati dentro, si presenta la pagina principale. in un piccolo frame compaiono le immagini e i nomi di 3 persone registrate prese a caso.

    la query, come l'ho inizialmente costruita, era così

    codice:
    SELECT nick, immagine FROM utenti ORDER BY RAND() LIMIT 3
    e funzionava alla grande. unico problema: ogni tanto fra i risultati veniva fuori anche quello della persona loggata!!

    ho quindi provato a risolvere così, escludendo dalla ricerca lo score il cui id sia diverso da quello dell'utente loggato

    codice:
    SELECT id, nick, immagine FROM utenti WHERE id != $sess_id ORDER BY RAND() LIMIT 3
    dove
    codice:
    $sess_id
    è la variabile contenente l'id dell'utente. ho provato a scriverlo in tutti i modi:

    codice:
    id != '$sess_id'
    codice:
    id != ".$sess_id."
    però il nome dell'utente loggato continua a venire fuori.
    insomma, non riesco a escluderlo dalla ricerca

    qualcuno riesce a capire dove sbaglio? ormai ci sto lavorando da ore e non riesco a vedere errori :berto:
    grazie per l'attenzione, ciaoooo!

    matteo

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    764
    Puoi usare la funzione rand() nella clausola WHERE. Poiché rand() restituisce un numero di tipo FLOAT tra 0 (compreso) e 1 (non compreso), noi sappiamo che vi è lo 0% delle probabilità che rand()<=0. Possiamo sfruttare tale consapevolezza per far sì che un particolare record abbia lo 0% delle probabilità di non essere trovato:

    SELECT nick, immagine FROM utenti WHERE id=$sess_id AND rand()<=0

  3. #3
    Moderatore di Motori di ricerca e webmarketing L'avatar di rigby76
    Registrato dal
    Oct 2005
    residenza
    Firenze
    Messaggi
    4,913
    La query come l'hai scritta va bene, non c'è molto da inventare. Stampa il risultato a schermo prima di inviarla al db così ti rendi conto di cosa scrive e capisci se c'è un errore. Magari il contenuto della variabile non è quello che ti aspetti.
    estremizzo, banalizzo e polemizzo!

    Hai letto le FAQ sui Motori di Ricerca?

  4. #4
    In SQl il simbolo per DIVERSO (o NON UGUALE) che dir si voglia è <>.
    Per cui la query deve essere:
    codice:
    SELECT id, nick, immagine FROM utenti WHERE id <> $sess_id ORDER BY RAND() LIMIT 3
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5

    ...

    Ho provato tutto ciò che mi avete consigliato, ma non è cambiato nulla.

    Il simbolo di diverso non fa differenza, a quanto pare valgono tutt'e due però non riesco ad escludere lo score che corrisponde all'utente loggato.

    Con la soluzione di brodik invece la query non mi restituisce nulla.


    Non riesco proprio a capire.. provo a postarvi il sorgente.

    codice:
    // apro la sessione e prendo la variabile di sessione 'id', relativa allo score dell'utente nel DB
    session_start();
    $sess_id=$_SESSION['id'];
    
    //query: seleziono id, nick, immagine di 3 utenti a caso, dove l'id è diverso da quello dell'utente
    $query = "SELECT id, nickname, immagine FROM utenti WHERE id != '$sess_id' ORDER BY RAND() LIMIT 3";
    
    //eseguo la query
    $conteggio = mysql_query($query,$connessione)or die(mysql_error());
    
    //separo la query in variabili
    $num = mysql_num_rows($conteggio);
    	
    while($row = mysql_fetch_array($conteggio))
    {
    
    $id=$row["id"];
    $immagine=$row["immagine"];
    $nickname=$row["nickname"];
    
    ...
    
    }
    qualcuno farebbe diversamente? fate conto che mysql e php non mi restituiscono nessun errore :master:

  6. #6

    Re: ...

    Originariamente inviato da matte911
    Il simbolo di diverso non fa differenza, a quanto pare valgono tutt'e due
    Qui ti sbagli di grosso: in SQL il != non esiste!
    Sicuramente il tuo errore è di concetto, e mi viene da pensare che nella clausola di WHERE vai a comparare qualcosa di non comparabile.
    Tipo.... l'ID del record è un numero intero finito.... te salvi quello nella sessione per riconoscere il tuo utente?

    Manda in echo la stringa SQL e vedi cosa ti restituisce.
    Codice PHP:
    $sql "SELECT id, nick, immagine FROM utenti WHERE id <> $sess_id ORDER BY RAND() LIMIT 3";

    echo 
    $sql; exit; 
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7

    Re: Re: ...

    Originariamente inviato da alcio74
    Qui ti sbagli di grosso: in SQL il != non esiste!
    Sicuramente il tuo errore è di concetto, e mi viene da pensare che nella clausola di WHERE vai a comparare qualcosa di non comparabile.
    Tipo.... l'ID del record è un numero intero finito.... te salvi quello nella sessione per riconoscere il tuo utente?

    Manda in echo la stringa SQL e vedi cosa ti restituisce.
    Codice PHP:
    $sql "SELECT id, nick, immagine FROM utenti WHERE id <> $sess_id ORDER BY RAND() LIMIT 3";

    echo 
    $sql; exit; 
    != esiste e significa "not egual".

    riferimento: http://dev.mysql.com/doc/refman/5.0/en/ix01.html

    Potrebbe esserci uno spazio che inficia l'uguaglianza. Oppure $sess_id non e' valorizzato.

    @matte911

    stampa la query e controlla come viene risolta la variabile.

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

  8. #8
    Giuro che ero sicuro si usasse solo <>.
    Oh... non si finisce mai di imparare.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9

    Re: Re: Re: ...

    ragazzi ho risolto tutto non so come! praticamente ho cambiato il nome della variabile 'id' che prendeva con la query in 'id2' e adesso non mi da più problemi


    grazie a tutti!

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