Newsgroup: it.comp.www.php
Titolo: query in array

premesso che mi picchio sempre con gli array:
1) dovrei salvare il risultato di una query in un array
2) salvare l'array in una var di sessione
3) recuperare quella var in un altra pagina
4) stampare in una tabella i dati di quell'array
i punti 2) e 3) sono ok
il punto 1) l'ho fatto così
	while ($riga_unused = mysql_fetch_array($res_unused))  {
					$not_used["nome"] = $riga_unused["nome"];
					$not_used["cognome"] = $riga_unused["cognome"];
etc...
}
però mi perdo con la stampa dell'output (ammesso che l'array sia creato 
bene)
è una scemata ma ...
come fare?

 
Dovrebbe andare..
Sir

 Dovrebbe andare..
mmm, me par di no
intanto non so se la memorizzazione dei dati avviene correttamente :/
(ed è il punto 1)
il ciclo per scorrere l'array , così come l'hai scritto, non mi pare 
funzioni :(

 3) recuperare quella var in un altra pagina
Domanda ma se esegui la query direttamente nella nuova pagina e risparmi 
il salvarti l'array ??
-- 
SEZIONE RECUPERO LAVORO: Lancio di una nuova lavatrice sul mercato, due 
morti e sei feriti.
[CapoBecchino] - hotmail/msn: capobecchino [@] hotmail [.] com

 salvarti l'array ??
magari
il fatto è che la query è TEMPORARY quindi, per averla nell'altra 
pagina, devo materializzare i dati ed ho pensato ad un array
cmq ... ci sono quasi :)

 il salvarti l'array ??
Magari ha un DB lento...
In questo modo si velocizza la cosa..
Sir

 In questo modo si velocizza la cosa..
non è questione di database lento o meno
il fatto è che non posso salvare i dati in un altra tabella mysql 
quindi devo escogitare un modo per portarmi i dati nell'altra pagina
..

 devo escogitare un modo per portarmi i dati nell'altra pagina
Allora c'è qualcosa che non mi torna..
Quando fai la query nella pagina1 accedi ad un DB con dei parametri, 
tabelle e dati. Ok?
Ora, nella pagina2 potresti fare lo stesso, no?
A meno che non entri in gioco il fattore "istante", ovvero la query 
nella pagina1 deve essere "fissata nel tempo" e visualizzata dopo con 
calma...
Sir

Sir Galahad ha scritto:

appunto è questo il problema .. :D ed è questo che intendevo io .. se 
non si ha la necessita di portarsi dietro i dati la query può benissimo 
essere fatta nella seconda pagina direttamente .. al max  se la query 
viene creata in questa pagina per alcuni valori che gli vengono passati 
si potrebbe pensare di portare nell'altra pagina i valori per ricreare 
la query ;)
-- 
SEZIONE OMICIDI: Nuova strepitosa offerta, porta 2 amici e vinci. 3 
suocere al prezzo di 2.


 }
Punto 1)
while ($rs=mysql_fetch_array($query))
{
         $arrTemp[]=$rs;
}

 4) stampare in una tabella i dati di quell'array
session_start();
print "<table>";
foreach ($_SESSION["arr"] as $riga) {
  print "<tr>\n";
  print "<td>" .$riga["nome"]. "</td>\n";
  ...
}
Come consiglio ti posso aggiungere di analizzare meglio il tuo codice, di
procedere mentalmente per ogni passo del software che stai per realizzare
e di simularlo nella tua testa prima di vederlo funzionare nel browser.
Bye.

 Ora, nella pagina2 potresti fare lo stesso, no?
no perchè la tabella temporanea è creata e popolata in base ad alcune 
operazioni costose (in termini di cpu) che sono nella pagina 1
i risultati vengono caricati in ram e, alcune anomalie, vorrei salvarle 
in un array (dalla temporary table) per poterli vedere nella pagina 2

 di portare nell'altra pagina i valori per ricreare la query ;)
non è così semplice
leggi la risposta sopra :)

Ataru ha scritto:

OOOKKK Allora fai cosi .. ;)
$result = QUERY DA ESEGUIRE
$_SESSION["query_da_portare"] = 
serialize(mysql_fetch_array(mysql_query($result)));
redirect alla nuova pagina ;)
nell'altra pagina avrai la tua query nella sessione ;)
-- 
SEZIONE PICCOLI ACCORGIMENTI: "Chiamami un tassì", mi disse prima di 
morire e sulla sua lapide ho scritto: "Qui riposa in pace Untassì".


}
ecco, in realtà mi bastava questa risposta che, dopo la pausa pranzo, 
ero riuscito a implementare
grazie a tutti per l'aiuto! :)

 operazioni costose (in termini di cpu) che sono nella pagina 1
potresti cavartela con un prepare statement o con una procedure in sql
che e' una soluzione mille volte piu' elegante rispetto a quella che
hai scelto.
come prepari di preciso la tabella temporanea?

 serialize(mysql_fetch_array(mysql_query($result)));
Direi che è LA soluzione (semplice ed economica).
Ma spiegami un pò sto serialize()?
Serve proprio???
Sir

 Serve proprio???
no, perche' quando metti un valore in array questo viene serializzato
in automatico

 
http://it2.php.net/manual/it/function.serialize.php
e ti ripeto di nuovo la domanda sei sicuro di ciò che scrivi ;) ???
beh! buona giornata :D



mysql_fetch_array restituisce solo una riga... non per niente si mette 
dentro un ciclo while in genere per ottenere le altre. Inoltre č meglio 
utilizzare mysql_fetch_assoc perché cosě non abbiamo doppioni di dati (la 
prima ti mette anche gli inidici in chiave numerica).
al massimo:
$sql= "select * from user";
$res= mysql_query($sql);
$myarr= Array();
while($riga= mysql_fetch_assoc($res)) {
    $myarr[]=$riga;
}
$_SESSION['serializzato']= serialize($myarr);
** per riavere l'array **
$myarr= unserialize($_SESSION['serializzato']);
ciao,
Luca(riello)

 mysql_fetch_array restituisce solo una riga... 
Guarda che io tranquillamente uso la sintassi come ho fatto l'esempio e 
mi carica tutto l'array tranquillamente senza mettere nessun ciclo while 
.. :|
Sicuramente c'è qualcosa che ignoro .. e chiedo venia ..


 e ti ripeto di nuovo la domanda sei sicuro di ciò che scrivi ;) ???
io si', tu invece mi sembra che spari a caso, e pure con spocchia

 Sicuramente c'è qualcosa che ignoro ..
probabilmente il fatto che una select puo' restituire piu' di una riga.
tremo al pensiero delle applicazioni che puoi scrivere se ignori cose
come questa

T_PAAMAYIM_NEKUDOTAYM ha scritto:

bah| ancora non riesco a capire .. sicuramente mi hai incolpato di 
rispondere senza pensare e posso accettarlo .. ma davvero non ti capisco 
.. scusa .. come io ti ho scritto la mia select genera x righe e 
tranquillamente le metto nel mio array cosa c'è di sbagliato ??
-- 
SEZIONE RECUPERO LAVORO: Lancio di una nuova lavatrice sul mercato, due 
morti e sei feriti.
[CapoBecchino] - hotmail/msn: capobecchino [@] hotmail [.] com

 tranquillamente le metto nel mio array cosa c'è di sbagliato ??
o e' sbagliato il codice che hai postato o e' sbagliato quello che hai
scritto che fa.
perche' se non cicli il fetch in un while non c'e' modo di accedere a
tutte le righe oltre la prima restituite dalla select, visto che
eseguiresti il fetch solo una volta, ovvero sulla prima riga restituita

T_PAAMAYIM_NEKUDOTAYM ha scritto:

Hai perfettamente ragione, ho toppato e chiedo venia .. :'(
Giuro che ero e sono in buona fede e solo che sto troppo incasinato e 
non ho controllato.
Come tu dici il codice su riportato lo uso per recuperare solo la prima 
riga e nella fretta avevo capito come recuperare un elemento della prima 
riga generata (la "una riga" di cui sopra) ..
Ancora 1000 scuse .. ;)
Logicamente sono incluse anche le scuse per le sessioni .. ;) anche li 
ho toppato .. ma avevo scordato che le sessioni sono automaticamente 
serializzate ;)
Ed in + mi sono accorto anche che il mio tono poteva risultare offensivo 
cosa che non volevo e ne vorrei mai fare ;) quindi scusa anche per 
questo ma la fretta stavolta mi ha giocato un bruttissimo scherzo ..
buon lavoro a tutti


 Ed in + mi sono accorto anche che il mio tono poteva risultare offensivo
Insomma un disastro il tuo intervento :D
ciao,
Luca(riello) 

 recuperare solo la prima riga
in questo caso aggiungi alla query LIMIT 0, 1 di modo da far restituire
alla select solo la prima riga, e' infatti inutile riempire la risorsa
di tutte le righe restituite dalla select se ti serve solo la prima

 Luca(riello) 
Buona giornata ;)
-- 
SEZIONE DIVERTIMENTO & AFFINI: "Qual è il poliziotto più sfortunato? 
Quello che muore al posto di  blocco. E quello più fortunato? Blocco!"
