Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    248

    Problema con stringa Explode e Select conteggio record in Motore Ricerca PHP MYSQL

    Ciao, faccio riferimento a QUESTO thread di 2 giorni fa.
    Sono riuscito a creare una ricerca funzionale su un database riuscendo a paginare i risultati.
    Ora mi trovo ad affrontare 2 problemi.
    1 - Vorrei che la ricerca fosse effettuata nel caso di più parole, per singola parola sui campi e non per forza segunedo l'ordine di inserimento.
    2 - Essendoci una paginazione ho la necessità di fare un conteggio dei record dove ogni singola parola è presente nei campi ma questo conteggio non deve essere fatto per record uguali (altrimenti sarebbe sfalsato)

    per il punto 1 ho risolto così:
    data la stringa $ricerca la esplodo inserendola in un array
    codice:
    $ricerca_array = explode(" ", $ricerca);
    Punto 2:
    la query per vedere quanti record ci sono nella tabella sarebbe (senza EXPLODE e funzionante):
    codice:
    // esecuzione prima query
    $count = mysql_query("SELECT COUNT(id) FROM news WHERE (titolo_news LIKE '%$ricerca%') or (descrizione_news LIKE '%$ricerca%')");
    $res_count = mysql_fetch_row($count);
    
    // numero totale di records
    $tot_records = $res_count[0];
    Con EXPLODE io ho scritto così:

    codice:
    // esecuzione prima query
    for ($x = 0; $x < count($keys); $x++) {
    $count = mysql_query("SELECT COUNT(id) FROM news WHERE (titolo_news LIKE '%$ricerca_array[X]%') or (descrizione_news LIKE '%$ricerca_array[X]%')");
    $res_count = mysql_fetch_row($count);
    $tot_records = $tot_records + $res_count[0];
    }
    echo (" $tot_records ");
    Ovviamente il $tot_records è sballato in quanto se ad esempio un solo record ha il campo titolo news contenente 'IL CAVALLO ROSA' e la ricerca viene fatta sulla stringa $ricerca 'IL CAVALLO ROSA' il totale dei record $tot_records avrà valore 3 invece che 1.
    E' possibile ovviare a questo in qualche modo?
    Grazie, Ale.

  2. #2

    Re: Problema con stringa Explode e Select conteggio record in Motore Ricerca PHP MYSQL

    Originariamente inviato da joint77
    Ovviamente il $tot_records è sballato in quanto se ad esempio un solo record ha il campo titolo news contenente 'IL CAVALLO ROSA' e la ricerca viene fatta sulla stringa $ricerca 'IL CAVALLO ROSA' il totale dei record $tot_records avrà valore 3 invece che 1.
    E' possibile ovviare a questo in qualche modo?
    Grazie, Ale.
    prova con count(distinct id)

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

  3. #3
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Prova con:
    Codice PHP:
    <?php
    mysql_query
    ("SELECT * FROM nome_tabella WHERE contenuto LIKE '%".$stringa."%'");
    ?>

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    248
    Grazie ragazzi, purtroppo nulla:
    @piero.mac: provato ma stando la query all'interno del ciclo for il distinct id non fa differenza

    @skjobax: non sto più lavorando su una singola stringa ma avendo fatto explode su un array di stringhe non credo che funzioni ma comunque provo

    Help.

    Il codice esatto che sto usando è questo (prima c'era un errore perchè l'avevo scritto senza provarlo):

    codice:
    $array_ricerca = explode(" ", $ricerca);
    for ($x = 0; $x < count($array_ricerca); $x++) {
    $count = mysql_query("SELECT COUNT(distinct id) FROM news WHERE (titolo_news LIKE '%$array_ricerca[x]%') or (descrizione_news LIKE '%$array_ricerca[x]%')");
    $res_count = mysql_fetch_row($count);
    $tot_record = $tot_record + $res_count[0];
    }
    echo ("$tot_record");

  5. #5
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Facendo appunto una LIKE % % e la COUNT insieme dovrebbe funzionare per una sola strringa, rendendo pubblico il suo contenuto e facendo in modo che MySQL selezioni le voci uguali o simili alla stringa.

  6. #6
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Sicuro che l'explode sia fatto correttamente?
    Oppure prova a fare una query per ogni parola con una foreach di queste...
    Oppure SELECT concatenate (Select nella Select)

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    248
    Si l'explode è corretto ho fatto delle prove con degli echo di verifica.
    Le query già le faccio per ogni parola ma con il ciclo FOR è molto differente rispetto al FOREACH? (questa comunque la cerco).
    Il concatenate non credo di poterlo utilizzare perchè essendo la stringa in entrata una variabile il numero di parole non è fisso quindi non posso sapere quante select devo fare secondo i casi (comunque anche questa me la riguardo).
    Sto decisamente impazzendoci sopra

  8. #8
    Utente di HTML.it L'avatar di skjobax
    Registrato dal
    Jan 2010
    Messaggi
    569
    Foreach è specifico per gli array, for no.
    Comunque il problema è la Select.
    Hai provato a visualizzare tutto senza for e foreach?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    248
    Ciao, grazie ho risolto QUI

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.