Newsgroup: it.comp.www.php
Titolo: consiglio per query

ciao a tutti,
in una .php che stampa a video una tabella mysql vorrei effettuare una 
ricerca a testo libero su tutti i campi.
di partenza non so i nomi dei campi (so solo il nome della tabella), 
quindi dovrei prima ricavarmeli e poi effetturare un'altra query con la 
ricerca, immagino.
ma come e dove devo inserire la seconda query?
in caso ci sono altre soluzioni possibili?
saluti
-- 
sp-
courrier électronique:
[spintop _ chez _ virgilio _ point _ it]

 ma come e dove devo inserire la seconda query?
Cioe'?
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Votami! 
http://www.phpclasses.org/vote.html
L'uomo, conscio di sbagliare, persevera.

 ha scritto nel messaggio
news:iztjc.152757$rM4.6...@news4.tin.it...


 Cioe'?
cioe', mi spiego :)
la query al momento e' molto semplice:
select campo1,campo2,campo(ecc) from tabella; //ad esempio
viene pero' ottenuta con dei passaggi precedenti, grazie ai quali ricavo 
l'elenco dei nomi dei campi, i quali vengono scritti nel formato:
campo1,campo2,campo(ecc)
per poi essere inseriti nella select, cosi' come la vedi poco sopra.
dovrei aggiungere alla select un WHERE (che?) LIKE...
ma non so cosa scrivere su "(che?)"


 Una cosa del genere è quello che serve a te...
andrebbe bene anche se fosse cosi' ?
SELECT campo1,campo2 FROM [nome_tabella] LIKE '%[VALORE]%';


 in caso ci sono altre soluzioni possibili?
sapere i nomi dei campi e fai solo la seconda
non serve una ricerca su tutti i campi dato che il primo e' un contatore
e alcuni saranno dei enum e degli altri relazioni (ID)


 Una cosa del genere è quello che serve a te...
umh.... tu sei sicuro che funziona vero?
ho qualche perplessita'.


 }
umh.....
c'e' un problema, non ci avevo pensato.
impostando cosi' la select non ottengo i nomi dei campi dall'array, ma 
l'array stesso.
mi spiego:
$campi = array("campo1","campo2","campo3");
$cerca = trim($_POST["ricerca"]);
$sql = "SELECT " . implode(",",$campi) . " FROM tabella";
if ($cerca!='') {
   $sql .= " WHERE " . $campi['0'] . " LIKE '%" . $cerca . "%'";
     for ($ac=0; $ac<count($campi); $ac++) {
// ocio
       $sql .= " AND " . $campi[$ac] . " LIKE '%". $cerca . "%'";
// dovrei invece dividere i campi, perche' ora ottengo "Array"
// se uso implode ottengo campo1,campo2,campo3 che e' sbagliato di nuovo
     }
   }
echo $sql;
pardon se ci sono errori di sintassi ecc.


non capisco.
allora se provo con l'esempio che ho appena riportato funziona.
se uso il codice oroginale ricevo:
SELECT campo1,campo2,campo3 FROM tabella WHERE Array LIKE '%srgh%' OR 
Array LIKE '%srgh%';
probabilmente perche' l'array dei campi viene (ancor prima) ricavato cosi':
   $elcampi = 'tab_' . $_POST["tabella"];
   eval ('$$arcampi = $'.$elcampi.';');
mentre se l'array dei campi fosse normale ...
   $arcampi = array("campo1","campo2","campo3");
...tutto va bene.
come tiro fuori quei dannati nomi di campi da $$arcampi ?


ho risolto, ma in altro modo.
dunque il fatto e' che $$arcampi viene ottenuto cosi':
$elcampi = 'tab_' . $_POST["tabella"]; //questo e' un array precedente
eval ('$$arcampi = $'.$elcampi.';');
quindi:
$sql="SELECT ".implode(",",$$arcampi)." FROM ".$_POST["tabella"];
$srch = $_POST["searchkeys"];
$cc=0; // per sapere se sto iniziando il loop e mettere WHERE
        // all'inizio e poi sempre OR (AND e' troppo restrittivo)
foreach ($$arcampi as $value) {
   if ($cc==0) {
     $add=" WHERE ";
   }else{
     $add=" OR ";
   }
   $sql .= $add . $value ." LIKE '%". $srch . "%'";
   $cc++;
}
$sql .= ";";


ma non so cosa scrivere su "(che?)"
WHERE 1=0
Ti ritorna sempre FALSE, pero' cosi' hai l'elenco dei campi e puoi sapere
dimensioni, tipo, eccetera... e ritorna FALSE *MOLTO* in fretta :-)
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

 dimensioni, tipo, eccetera... e ritorna FALSE *MOLTO* in fretta :-)
oddio, questa non la sapevo :-/
quando hai due minuti liberi me la spieghi?
