Newsgroup: it.comp.www.php
Titolo: select in campo con testo formattato

Utilizzo MySql con PHP5.
Ho una tabella con dei campi che contengono del testo formattato.
Quello che segue � uno spezzone esemplificativo del contenuto di un campo:
&lt;p style=&quot;text-align: center;&quot;&gt;
 &amp;nbsp;&lt;/p&gt;
&lt;p&gt;
 &amp;nbsp;&lt;br /&gt;
 accompagnati dall&amp;#39;attestato di certificazione energetica ed hanno
prestazioni superiori a quelle richieste per le agevolazioni del
55%.&lt;em&gt;Come usufruire dell&amp;#39;agevolazione:&lt;/em&gt;&lt;br
/&gt;
 Occorre trasmettere all&amp;#39;Enea (attraverso il sito internet &lt;a
href=&quot;
http://www.acs.enea.it
&quot;&gt;
www.acs.enea.it
&lt;/a&gt;) entro
90 giorni dalla fine dei lavori la documentazione necessaria: ovvero i dati
contenuti nell&amp;#39;attestato di
Dovendo fare una ricerca  sui campi utilizzo una query del tipo:
SELECT news.idnews, news.ordine, news.vocemenu, news.testonews FROM news
WHERE (((news.ordine)>0) AND ((news.vocemenu) Like '%$CasellaDiRicerca%')
AND ((news.testonews) Like '%$CasellaDiRicerca%'));
Dove $CasellaDiRicerca � il testo che viene cercato.
Purtroppo non trattandosi di solo testo mi vengono dei risultati sbagliati.
La mia domanda �: dove posso documentarmi per fare una query corretta?
Grazie a chi trovera il tempo pre aiutarmi.
Leonardo

 non formattato) da usare solo ai fini della ricerca...
Poi nascerrebbe il problema della gestione dei campi doppi quando il testo 
viene modificato.
Metodo casareccio per casareccio potri leggere la stringa, estrarre i 
caratteri 1 ad 1, e copiarli in una nuova stringa.
Durante la lettura, quando incontro il carattere < cesso di copiare i 
caratteri fino a che non trovo il carattere >.
Ma non credo sia il metodo migliore anche perch� rall'enta la pagina.
Ciao
Leonardo

Ma non credo sia il metodo migliore anche perch� rall'enta la pagina.
L'altro metodo ti rallenta lo stesso, anche se un filo meno:
ALTER TABLE test ADD COLUMN testo_txt text;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty text )
 RETURNS text
 DETERMINISTIC
BEGIN
DECLARE iStart, iEnd, iLength int;
WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty
)) > 0 DO
BEGIN
SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<',
Dirty ));
SET iLength = ( iEnd - iStart) + 1;
IF iLength > 0 THEN
BEGIN
SET Dirty = Insert( Dirty, iStart, iLength, '');
END;
END IF;
END;
END WHILE;
RETURN Dirty;
END;
| DELIMITER;
DELIMITER |
CREATE TRIGGER levahtml_update BEFORE UPDATE ON test
  FOR EACH ROW BEGIN
    SET NEW.testo_txt = fnStripTags(NEW.testo);
  END;
| DELIMITER;
DELIMITER |
CREATE TRIGGER levahtml_insert BEFORE INSERT ON test
  FOR EACH ROW BEGIN
    SET NEW.testo_txt = fnStripTags(NEW.testo);
  END;
| DELIMITER;
=====
Und ze result is:
INSERT INTO test ( testo ) VALUES ("Quel <em>ramo</em> del lago di
<u>Como</u>");
select * from test;
+--------------------------------------------+----------------------------+
| testo                                      | testo_txt                  |
+--------------------------------------------+----------------------------+
| Quel <em>ramo</em> del lago di <u>Como</u> | Quel ramo del lago di Como |
+--------------------------------------------+----------------------------+
Poscia, fai le tue ricerche su testo_txt.
Rallenta l'insert, e l'update, e ti occupa pi� spazio, ma la ricerca pi�
veloce di cos� non ti pu� andare.
Secondo me ti conviene farlo in PHP per�. HTML_Entity_Decode, strip_tags
ed utf8_encode come grandine. Se hai sistemato bene il codice, INSERT ed
UPDATE li fai in un punto solo del codice; modificarlo � rapido.
Leonardo Mengele
-- 
Enough, enough!  But, stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!

 ha scritto nel messaggio 
news:lbjrb69ioo5ua625q...@L.Serni...

Ti ringrazio.
Saluti
Leonardo

 Ma non credo sia il metodo migliore anche perchè rall'enta la pagina.
ovvio, se il lavoro invece lo fai in fase di salvataggio non hai
questo problema.