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

Discussione: query

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11

    query

    Un saluto a tutti.

    Non ho ancora molta dimestichezza con le query, quindi non stupitevi se la domanda vi sembrerà sciocca!

    Il mio problema al momento è questo:

    ho due variabili, $pippo e $pluto, che possono contenere uno o più numeri separati da virgole; $pippo è nel database mentre $pluto è dichiarata nel file .php.
    La query dovrebbe trovare tutti i record in cui un qualsiasi numero contenuto in $pippo è presente in $pluto.

    Ho provato con le parentesi quadre:
    Codice PHP:
    where '[pippo]' LIKE '[$pluto]' 
    ma non va.

    Qualcuno mi può aiutare?

    Grazie.

  2. #2
    Ciao credo che tu stia cercando di fare una cosa nel modo sbagliato...
    se ho capito bene, PIPPO non è una variabile ma un campo di un database relazionale...
    $pluto invece è un'altra variabile che assume un valore "costante"


    Il codice da usare dovrebbe quindi essere

    $sql = "SELECT * from NOME_TABELLA where PIPPO like '%$pluto%' ";
    $result = mysql_db_query($nome_db,$sql)
    or die(mysql_error(). "
    $sql");

    while($row=mysql_fetch_array($result)){

    echo($row["PIPPO"]);
    }

  3. #3
    Ciao.
    Innanzitutto. Pippo ke tipo di campo è? Se può contenere numeri separati da virgola vuol dire che è o di tipo varchar o di tipo testo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Innanzitutto grazie per le risposte.

    Pippo è un campo varchar.

    Ma cercherò di spiegare meglio la situazione:

    - nel database ci sono diverse classi di utenti (contrassegnate da numeri), ed ogni utente può appartenere a diverse classi.
    - nella sezione download ci sono diversi file, ognuno visibile solo da determinate classi di utenti.

    Diciamo che Pippo è il campo della tabella download e contiene i numeri corrispondenti alle classi che hanno il permesso per accedere al file (es. "2,5"); e $pluto è la classe-utente che ho già definito all'inizio del file .php in cui è la query (es. $pluto = "1,4,5").

    Vorrei chiedere al db di restituire solo i record in cui nel campo Pippo è presente uno qualsiasi dei numeri presenti nella variabile $pluto.

    Ho provato con la soluzione di maur1, ma non va (cercherò di capire perchè).

    Grazie ancora.

  5. #5
    Ti conviene fare una cosa del genere:

    prendi tutti i numeri contenuti nella variabile $pluto e mettili in un array:

    $valori_classi_utente = explode(",", $pluto);

    Prendendo il tuo esempio $pluto = "1,4,5"

    ora in $valori_classi_utente[0] hai il valore 1
    in $valori_classi_utente[1] hai il valore 4
    e in $valori_classi_utente[2] hai il valore 5

    Ora, dobbiamo sfruttare la funzione di MySQL LOCATE()

    cioé LOCATE(substr,str)
    tale funziona trova la prima occorenza di substr in str. Restituisce 0 se non l'ha trovata.

    quindi io farei in tal modo:

    foreach ($valori_classi_utente as $elem) $condition .= "LOCATE($elem, PIPPO)<>0 OR ";

    Ora togliamo l'ultimo OR seguito e preceduto da spazio quindi gli ultimi 4 caratteri;

    $len = strlen($condition);

    $condition = substr($condition, 0, $len-4);


    $sql = "SELECT * FROM download WHERE ($condition)";

    Dovrebbe funzionare

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Proverò.

    Grazie.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Provato. Ottimo!

    Non ho capito esattamente quel "-4", ma è proprio quello che faceva al caso mio.

    Ancora grazie.

  8. #8
    il -4 serve per togliere l'OR finale preceduto e seguito dallo spazio.

    Mi spiego supponiamo ke $valori_classi_utente contega i valori 5 e 8.
    Dopo il foreach:

    foreach ($valori_classi_utente as $elem) $condition .= "LOCATE($elem, PIPPO)<>0 OR ";

    $condition sarà:

    "LOCATE(5, PIPPO)<>0 OR LOCATE(8, PIPPO)<>0 OR ";

    Quindi tale stringa che devi mettere nella clausola WHERE, così com'è è sbagliata. Dobbiamo togliere gli ultimi 4 caratteri cioè OR seguito e preceduto da uno spazio.

    Spero di essere stato chiaro.
    Ciao.

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da gianf_tarantino
    il -4 serve per togliere l'OR finale preceduto e seguito dallo spazio.

    Mi spiego supponiamo ke $valori_classi_utente contega i valori 5 e 8.
    Dopo il foreach:

    foreach ($valori_classi_utente as $elem) $condition .= "LOCATE($elem, PIPPO)<>0 OR ";

    $condition sarà:

    "LOCATE(5, PIPPO)<>0 OR LOCATE(8, PIPPO)<>0 OR ";

    Quindi tale stringa che devi mettere nella clausola WHERE, così com'è è sbagliata. Dobbiamo togliere gli ultimi 4 caratteri cioè OR seguito e preceduto da uno spazio.

    Spero di essere stato chiaro.
    E se un numero ha due cifre?

  10. #10
    Originariamente inviato da luca200
    E se un numero ha due cifre?
    Non capisco questa osservazione. Se ti riferisce al fatto di prendere i valori dalla stringa $pluto, questi son separati da , quindi un numero può avere anche 5 cifre.

    Se invece ti riferisci al -4 quello serve solo a togliere L'OR finale come ho detto ed è indipendente dalle cifre di cui si compone un numero.

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.