Newsgroup: it.comp.www.php
Titolo: Query Mysql selezione random da un range di righe

Dovrei fare qualcosa del tipo:
ORDER BY id DESC AND Limit 0,20
quello che vorrei ottenere perň č che:
dagli ultimi 20 record inseriti (riconosciuti da id DESC)
me ne selezioni 6
come fare?
Arjuna
ps: posto qui e non su i.c.s.database perchč chi lavora in php č piů
aggiornato circa le soluzioni mysql
-- 
Gnotis se auton.
 15/04/2004 0.31.09

come fare?
Con due query. La prima calcola il massimo id inserito fino a quel
momento. Poi fai una SELECT sugli ultimi 20 record ordinati a caso
e gli metti una LIMIT 6.
Oppure con una subquery, che poi e' esattamente la stessa cosa.
Oppure te ne infischi e prelevi tutti e 20 gli ultimi record in un
array di array, sul quale usi shuffle().
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

 array di array, sul quale usi shuffle().
$query = "SELECT id, artista, titolo, immagine  FROM mf_album ORDER BY id
DESC Limit 0,20";
$richiesta = mysql_query ($query, $link) 
 
$richiesta = shuffle (mysql_fetch_row($richiesta));
while (list ($id, $artista, $titolo, $immagine) = $richiesta) {
}
cosě perň non va... mi crea un loop infinito
-- 
Gnotis se auton.
 15/04/2004 13.30.03

 cosě perň non va... mi crea un loop infinito
L'errore e' evidente, oltre a mancare un ";", cerca di strivere le
variabili con cognizione di causa:
<?php 
$query = "SELECT id, artista, titolo, immagine  FROM mf_album ORDER BY
id DESC Limit 0,20";
$rsRichiesta = mysql_query ($query, $link);
$richiesta = array ();
while ($rowRichiesta = mysql_fetch_row($richiesta)) {
	$richiesta[] = $rowRichiesta;		
}
$richiesta = shuffle ($richiesta);
print_r ($richiesta);
?>
N.B. Manca qualsivoglia tipo di controllo sul risultato della query.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Votami! 
http://www.phpclasses.org/vote.html
L'uomo, conscio di sbagliare, persevera.

> N.B. Manca qualsivoglia tipo di controllo sul risultato della query.
cosa intendi con questo? è un problema che nella mia ingenuità non mi si
era mai presentato
-- 
Homo sum, humani nihil a me alienum puto.
 15/04/2004 15.29.03

intendi una cosa di questo genere?
$rsRichiesta = mysql_query ($query, $link) or die ( "Non riesco ad eseguire
la richiesta $query");
-- 
Gnotis se auton.
 15/04/2004 15.31.09
-- 
Gnotis se auton.
 15/04/2004 15.31.39

 eseguire la richiesta $query");
Per quello che riguarda la gestione corretta dei valori di ritorno ti
rimando al 
http://setecastronomy.stufftoread.com/go.php?ID=23
Per quello che riguarda i controlli sull'input vedi il manuale ed alla
funzione 
http://www.php.net/mysql_escape_string
 (e versione _real_ ).
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E


Non riesco ad accedere al messaggio di sotto per questo rispondo qui:
$query = "SELECT id, artista, titolo, immagine  FROM mf_album WHERE 
immagine != '' AND immagine != 'no_label.gif' ORDER BY id DESC Limit 0,20";
$rsRichiesta = mysql_query ($query, $link) or die ( "Non riesco ad eseguire 
la richiesta $query");
$richiesta = array ();
while ($rowRichiesta = mysql_fetch_row($rsRichiesta)) {
	$richiesta[] = $rowRichiesta;		
}
$richiesta = shuffle ($richiesta);
while (list ($id, $artista, $titolo, $immagine) = $richiesta) {
	echo "<a href='pagina.php?name=visualizza&id=$id' title='$artista - 
$titolo'><img src='immagini/thumb_$immagine' alt='$artista - 
$titolo'/></img></a>\n";
}
Questo è quanto ma non funge... stesso errore di prima... 	
ho sostituito
while ($rowRichiesta = mysql_fetch_row($richiesta)) {
con
while ($rowRichiesta = mysql_fetch_row($rsRichiesta)) {
perchè il primo non funzionava e mi sembrava errato...
ma continua a non funzionare
Come avrei dovuto procedere per il debug?
-- 
Gnotis se auton.
 15/04/2004 16.50.15





Uhm. Una domanda seria: ma cominciare da qualcosa di piu' semplice, e
studiarsi il linguaggio, prima di buttarsi cosi' a casaccio? Perche',
li' sopra, stai buttando codice a casaccio.
I meta-errori che fai sono:
	1. Non leggere il manuale
	2. Non leggere le FAQ
	3. Non buttare giu' un minimo di flusso con carta e penna
	4. Non provare a ispezionare le variabili nei punti critici
	   usando print e print_r (in mancanza di un debugger)
Questi meta-errori provocano in quel codice i seguenti errori - e, in
un altro codice, ne provocherebbero di analoghi o peggiori:
	1. Usi shuffle() in modo errato (nel valore di ritorno)
	2. Usi shuffle() in modo errato (negli argomenti)
	3. Usi $richiesta in modo errato (come array e come handle)
	4. Imposti un while() che o non comincia, o non finisce - nel
	   caso presente non finisce
	5. Non ti accorgi che $richiesta non e' piu' un array (e anzi
	   nel caso presente non lo e' mai)
Per riciclare la tua signature, 'gnoti se auton' :-)
	...
	// Eseguo la query, ottenendo una 'result handle'
	$exec = mysql_query($query, $link);
	// Estraggo gli array corrispondenti alle righe, quante
	// ce ne saranno (gia', quante?), in un array di array
	// Che inizialmente e' un array vuoto
	$risultati = array();
	while($risultato = mysql_fetch_row($exec))
		$risultati[] = $risultato;
	// Rilascio le risorse impegnate da MySQL
	mysql_free_result($exec);
	// Rimescolo i risultati. Shuffle() non ritorna niente e
	// continuo a usare $risultati (NB: che magari e' vuoto)
	shuffle($risultati);
	...


 ma continua a non funzionare
Tralasciando quanto detto dal buon Leonardo.
L'errore nello script postato e' stato un typo per quello che riguarda
$ricerca ed una mancanza per shuffle (non lo uso spesso e non ho
controllato il costrutto).
-- 
I am what I am, I do what I can


 Leonardo
Arjuna
-- 
Gnotis se auton.
 15/04/2004 23.24.04

e come per magia:
$exec = mysql_query ($query, $link) or die ( "Non riesco ad eseguire la
richiesta $query");
	$risultati = array();
	while ($risultato = mysql_fetch_row($exec)) {
		$risultati[] = $risultato;       
	}
	mysql_free_result($exec);
	shuffle($risultati);
	for ($i = 0; $i < 7; $i++ ) {
  		list($id, $artista, $titolo, $immagine) = $risultati[$i];
 
 
funziona!!!
per chi come me ignora questa è ancora magia...
Arjuna
-- 
Homo sum, humani nihil a me alienum puto.
 15/04/2004 23.48.16


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).