Visualizzazione dei risultati da 1 a 10 su 10

Discussione: query mysql come fare?

  1. #1

    query mysql come fare?

    Ciao a tutti,
    non riesco a venire a capo di una problematica a cui mi sono imbattuto da tempo.. Vi spiego:

    come ad esempio youtube, io, ho una pagina con un form dove inserisci il testo e i tag delimitati da una virgola, il tutto si va a salvare in un database mysql;

    in un altra pagina, quella della visualizzazione del testo, vorrei fare una query che mi stampa gli argomenti simili utilizzando i tag presenti...

    come posso fare?

    Ho pensato a una cosa del genere:
    Codice PHP:
    <?
    //prendo i tag dell' argomento che sto visualizzando
    $arg="SELECT tag FROM argomento WHERE id='$_GET[id]'";
    $result=mysql_query($arg) or die ("falllita");
    $tags=mysql_result($result,0,"tag");
    //selezioni gli argomenti che hanno quei tag
    $simili="SELECT * FROM argomento WHERE tag LIKE '$tags'";
    Ad occhi sembra che funzioni, ma in realtà non funziona così bene, perchè non controlla ogni singolo tag delimitato dalla virgola ma controlla tutta la stringa per intero...

    Spero di essermi spiegato,
    aiuto pls.
    Grazie in anticipo, Francesco.

  2. #2
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Il metodo più veloce che mi viene in mente da adottare senza bisogno di modificare il db e per raggiungere il tuo scopo è che una volta recuperati i tag utilizzi la funzione explode per separare i singoli tag come elementi di un array ed eseguire un ciclo su di essi per avere la query finale. Il codice in esempio potrebbe diventare qualcosa tipo questo:
    Codice PHP:
    <? 
    //prendo i tag dell' argomento che sto visualizzando 
    $arg="SELECT tag FROM argomento WHERE id='$_GET[id]'"
    $result=mysql_query($arg) or die ("falllita"); 
    $tags=mysql_result($result,0,"tag"); 

    tags explode(','$tags);

    $sql = array();
    foreach (
    $tags as $tag) {
       
    $sql[] = "SELECT * FROM argomento WHERE tag LIKE '%$tag%'";
    }
    $sql implode($sql' UNION ');

  3. #3
    Ti dispiacerebbe farmi un esempio sul ciclo e la query finale che non l'ho capito tanto bene...
    Comunque grazie per l'aiuto.

  4. #4
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    In che senso un esempio? Che cosa non ti è chiaro esattamente?

  5. #5
    Originariamente inviato da _debo
    ed eseguire un ciclo su di essi per avere la query finale.
    Questo...

  6. #6
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Ehm come dire, non devi fare nulla, stavo semplicemente spiegando il codice che avevo scritto non devi eseguire alcun ciclo, devi solo eseguire la query.

  7. #7
    Puoi farmi un esempio funzionante di stampa?
    Tipo vorrei stampato
    Codice PHP:
    //supponendo che di questi argomenti simili vorrei stampare il campo titolo
    <div>
    Argomenti simili


    //ciclo while...
     <div>
     <? echo $titolo?>
     </div>
    //fine while
    </div>
    Perchè non capisco: quando scrivi
    Codice PHP:
    tags=explode(',',$tags); 
    tags non è una variabile? Non sarebbe dovuto essere $tags?
    Se si, non si sostituisce al
    Codice PHP:
    $tags=mysql_result($result,0,"tag"); 
    ?

    Vorrei un esempio mirato e funzionante se non chiedo molto o disturbo...
    Scusami, sembrerà strano, ma non ho usato mai l' explode...

  8. #8
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Non c'è bisogno di chiedere scusa, sono io che devo scusarmi per un errore di scrittura.
    Codice PHP:
    $tags explode(','$tags); // e non tags = explode(',', $tags); 
    Mentre per quanto riguarda:
    Codice PHP:
    $tags mysql_result($result0'tag'); 
    tag in mysql_result rappresenta l'offset da cui vuoi estrarre. A dire il vero in questo caso non servirebbe nemmeno perché la query iniziale estrae già solo quel campo.
    Codice PHP:
    $arg "SELECT tag FROM argomento WHERE id = '$_GET[id]'"
    Tutto questo per dire che lo script dovrebbe essere apparire come segue:
    Codice PHP:
    <?php
    $sql 
    "SELECT tag FROM argomento WHERE id = '$_GET[id]'";  
    $result mysql_query($sql) or die ("Query $sql fallita");  
    $tags mysql_result($result0);  

    $tags explode(','$tags); 

    $sql = array(); 
    foreach (
    $tags as $tag) { 
       
    $sql[] = "SELECT * FROM argomento WHERE tag LIKE '%$tag%'"


    $sql implode($sql' UNION ');

    $result mysql_query($sql) or die ("Query $sql fallita");
    while (
    $row mysql_fetch_array($resultMYSQL_NUM)) {
        
    // todo: your code
    }
    Tenuto presente che si potrebbe anche migliorare ulteriormente ma visto il tuo attuale livello non vorrei complicare troppo le cose.

  9. #9
    Grazie, =) chiaro e coinciso!
    Quanto prima lo testo e ti faccio sapere, al momento sono un po incasinato...
    Grazie tante!!

  10. #10
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Di niente aggiornami poi.

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.