Estrazione da db MySQL con query molto lunga

Fxxxx

Utente Attivo
17 Set 2011
63
0
0
Salve
Dovrei estrarre da un db mysql una serie di righe usando gli ID che sono contenuti in un array. Il numero di queste righe è molto alto: di base pensavo a 100 e al click dell'utente ne vengono caricati altri 100 (e quindi la query diventa di 200) e così via... quindi se l'utente clicca 7 volte la query deve estrarre 700 righe, numero molto elevato usando gli ID

La soluzione potrebbe essere usare:
PHP:
$query = "SELECT * FROM table WHERE id IN (12, 5, 77, 123...)";
oppure creando una query per ogni riga ma questo mi sembra molto dispendioso... non è così???

Per la prima soluzione mi sembra di aver letto che le query hanno un limite di lunghezza giusto? quindi non potrebbe essere infinita... giusto?

Cosa fareste voi?

Grazie
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Potresti provare cosi se ho capito bene

Codice:
SELECT * FROM table WHERE id<=200 AND id>=100
 

Fxxxx

Utente Attivo
17 Set 2011
63
0
0
e no... perché i numeri (gli id) non sono dal 100 al 200 ma sono discontinui tipo: 2, 6, 34, 67, 100, 3, 35... (questi 100 o 200 0 300...)
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
e no... perché i numeri (gli id) non sono dal 100 al 200 ma sono discontinui tipo: 2, 6, 34, 67, 100, 3, 35... (questi 100 o 200 0 300...)

Se non sono in un ordine numerico 'manipolabile' allora con che criterio vengono selezionati scusa?
 

Fxxxx

Utente Attivo
17 Set 2011
63
0
0
Gli id di cui voglio estrarre le info sono contenuti in un array (creato con un certo criterio, che è ininfluente nel problema della lunghezza della query)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se per ipotesi tu hai una tabella del tipo
id|titolo|testo
potresti provare a fare così, un'unica interrogazione e poi tutto con script
PHP:
<?php
$array_di_id=array(882, 2, 6, 34, 67, 100, 3, 35, 99, 3897);
$query = mysql_query("SELECT * FROM table ORDER BY id");
while($riga=mysql_fetch_assoc($query)){
	if(in_array($riga['id'], $array_di_id){
		$testo[]=$riga;//$testo[0][id], $testo[0][titolo],$testo[0][testo],$testo[1][id], $testo[1][titolo],$testo[1][testo]ecc... con i relativi valori del campo
	}
}
foreach($testo as $ch_1 => $val_1){
	echo "<hr>";
	foreach($testo[$ch] as $ch_2 => $val_2){
		echo $val_2['titolo']."<br />".$val_2['testo'];
	}
	echo "<hr>";
}
?>
prova al massimo non funzia
 

Fxxxx

Utente Attivo
17 Set 2011
63
0
0
è una buona idea ma non sarà anche questa dispendiosa? In questo modo la query restituisce tutte le righe... ipotizzando di avere 100000 righe il ciclo while diventa lunghissimo... no? Non diventerebbe troppo dispendioso?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
La soluzione di borgo mi sembra buona però cosi ogni volta devi ciclare tutti gli id, a questo punto perché non inserire direttamente l'array numerico nella query?

PHP:
$query = mysql_query("SELECT * FROM table WHERE id IN(".join(',',$array).")");
 

Fxxxx

Utente Attivo
17 Set 2011
63
0
0
ho già detto qual è per me il problema di questa risoluzione: ho letto che le query non possono essere troppo lunghe... immagine di estrarre 700 righe con id che sono anche abbastanza lunghi... la query risulterebbe molto lunga... non sarebbe un problema? cosa dite?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
ho già detto qual è per me il problema di questa risoluzione: ho letto che le query non possono essere troppo lunghe... immagine di estrarre 700 righe con id che sono anche abbastanza lunghi... la query risulterebbe molto lunga... non sarebbe un problema? cosa dite?
Con l'esempio mostrato sopra prendere tutti gli id dell'array, non tutti quelli nel database, quindi è l'array che dovrebbe avere tale quantità, comunque è fattibile ugualmente, al massimo caricherà per alcuni secondi dato che è solo una select
 

Fxxxx

Utente Attivo
17 Set 2011
63
0
0
quindi per te non ci sono limiti di lunghezza per una query? perché avevo letto che ce n'era... e quindi mi sono allarmato...
Per voi quindi qual è la migliore soluzione?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
quindi per te non ci sono limiti di lunghezza per una query? perché avevo letto che ce n'era... e quindi mi sono allarmato...
Per voi quindi qual è la migliore soluzione?
Per me te l'ho detto, selezionare solo gli id inerenti all'array che viene formulato nello script

edit: ho letto un po sul sito di mysql riguardante max_allowed_packet, e pare che sia la quantità massima di dati inviabili quindi non la lunghezza vera e propria, forse per le interrogazioni non c'è un limite prefissato, quindi non farti tanti scrupoli
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
fai delle prove
PHP:
<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$inizio=microtime_float();
/*
qui una volta un sistema
poi l'altro
*/
$fine=microtime_float();
$durata=$fine-$inizio;
echo "messi $durata secondi";
?>
e valuti quale è il più rapido
 

Fxxxx

Utente Attivo
17 Set 2011
63
0
0
ringrazio entrambi! quando avrò un db + pieno testerò tutte e due le soluzioni per vedere qual è la più veloce... se ho altri dubbi su questo argomento vi faccio sapere qui
Grazie e a presto!
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Menu a discesa con estrazione dati da datbase mysql PHP 21
E Progressbar estrazione dati da tabella mySQL Ajax 9
L estrazione dati da mysql in php e salvataggio in cartella del server PHP 51
S Php e mysql, estrazione da una tabella e inserimento in un'altra tabella PHP 14
gandalf1959 Estrazione di un singolo dato da una ricerca mysql PHP 1
N Estrazione Record multipli da MySQL in OO PHP 0
B Estrazione Tabella MYSQL PHP 2
I estrazione valore da mysql where nome_campo è uguale alla session_id PHP 10
I estrazione immagine in 2 formati da una tabella mysql PHP 3
I estrazione mysql in base al login PHP 77
L Estrazione immagine database mysql PHP 1
A problema: estrazione dati da query mysql e assegnazione ad una variabile PHP 2
C Estrazione MySql da menù a tendina PHP 42
K Estrazione di più risultati da tabelle correlate PHP 5
L Estrazione dati php Database 6
L Estrazione dati casuali non doppioni MySQL 1
D Chiave unica in estrazione dati da array php PHP 0
L Estrazione valori max su più campi MySQL 4
M [PHP] Estrazione random con nomi presi dal db PHP 22
gandalf1959 Estrazione e visualizzazione del simbolo dell'euro php/mysqli PHP 0
ronny1710 Estrazione Dati Tessera Sanitaria .NET Framework 1
F Estrazione Email di persone selezionate e attive / facebook + invio di massa! Annunci servizi di Social Media Marketing 0
V Estrazione di una singola banda da file multi banda (RGB) con Python Programmazione 0
creatorweb [PHP] estrazione ciclica dati con 2 dati alla volta PHP 2
O [PHP] problema estrazione immagine da db PHP 12
Gigi87 [PHP] Estrazione dati da forum o da social network PHP 1
V [PHP] Estrazione con SQL PHP 1
M [MS Access] Estrazione record multipli MS Access 1
E [PHP] estrazione dati in modo non continuativo PHP 1
S [PHP] estrazione dal DB complicata PHP 7
asevenx [Javascript] Estrazione dal database di un valore in base ad una scelta Javascript 7
P Probelma estrazione stringa PHP 5
C Estrazione Dati da Pagine Gialle PHP 0
L Estrazione Articoli Random da Tabella senza doppioni PHP 1
A Estrazione dati da tabella sql MySQL 27
T Codice per estrazione dati da db PHP 4
F estrazione codice Javascript 0
R Javascript e html - estrazione EXIF da jpg con link per geolocalizzazione google maps Javascript 0
D php estrazione random nomi e senza ripetizione PHP 14
M Problema con estrazione coordinate da google geocoding PHP 1
L Conversione date ed estrazione PHP 0
L estrazione dati per login PHP 0
W Estrazione dati da DB PHP 20
N Problemi estrazione / visualizzazione immagini dal database con PDO PHP 2
L Estrazione dati per settimana. PHP 13
L estrazione dati e immagini in contemporanea PHP 4
B Estrazione Database valori multipli MySQL 4
M estrazione dati casuali da database Database 0
A Evitare estrazione record doppioni PHP 2
C [PHP][MY SQL] - Estrazione dati database tramite form PHP 8

Discussioni simili