ordinare il risultato di una query con variabili unite

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve, dopo un attenta ricerca su questo forum non ho trovato esattamente quello che cercavo forse perchè la cosa è un pò complessa

spiego al volo

ho una tabella così composta
ID_NAME|Nome|Cognome|Soprannome

sia nome che cognome non sono mai vuoti mentre soprannome può esere vuoto

in sostanza io estraggo prima i soprannomi e quando trova il soprannome = "" ricerco tramite cognome e nome

questa è la query contenuta in una select multpila


PHP:
<?php


mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");

$sqlquery = "SELECT * FROM tabella Order by Soprannome,Cognome"; 
$result = mysql_query($sqlquery);
 while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 $id=$linea['ID_NAME'];
 $sopra=$linea['Soprannome'];
 $cognome=$linea['Cognome'];
 $nome=$linea['Nome'];
 if($sopra!=''){
 $thename=$sopra;
  }else{
 $thename=$cognome." ".$nome;
 }

echo  "<option value=\"$id\">$thename</option>";

}

nella select multipla mi ordina prima i nomi nomi e cognomi e successivamente mi rilista i soprannomi ordinati , togliendo l'order by ovviamente non me li lista ordinati. questo sicuramente perchè ho messo l'if dove quando non trova il soprannome prende cognome e nome senno mi prende il soprannome escludendo nome e cognome.

ho provato con la funzione sort ma mi restutisce vuoto e saprei anche il eprchè ma non riescoa veninre fuori

suggerimenti?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
poi provare in questo modo

PHP:
<?php
//....
$nomi=array();//predispongo un'array
$sqlquery = "SELECT * FROM tabella"; //qui non ti serve l'order by in quanto ordini dopo
$result = mysql_query($sqlquery);
while ($linea = mysql_fetch_array($result)) {
	$id=$linea['ID_NAME'];
	if($sopra !=""){
		$nomi[$id]=$linea['Soprannome'];
	}else{
		$nomi[$id]=$linea['Cognome']." ".$linea['Nome'];
	}
}
asort($nomi);//ordino l'array alfabeticamente !!usare asort non sort per mantenere corrispondenza chiave=>valore
echo "<select name=\"select\">";
foreach($nomi as $chiave => $valore){// e lo ciclo
	echo  "<option value=\"$chiave\">$valore</option>";
}
echo "</select>";
//.....
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
grande borgo

avevo provato a creare l'array però non risucivo ad ordinarlo

era da usare asort :hammer:

grazie mille
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
una curiosità sempre al riguardo di qeusto codice,

se io in $nomi ho ad esempio 4 nomi uguali mentre li ordina come potrei fare per dargli un identificativo diverso che so

se ho 4 Antonio(nei soprannomi) come posso farli listare ad esempio

Antonio(1)
Antonio(2)
etc. o meglio come associargli un altro campo della tabella stessa?

Delt ipo il primo antonio è di bari, il secondo di lecce e far uscire la lista ordinata più queste aggiunte qunado trova dei nomi uguali?

Esempio
Alessandro
Antonio(Bari)
Antonio(Lecce)
etc.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
non è semplicissimo poroverei a fare in questo modo
intanto dipende dove hai il valore citta (bari, lecce ....) se nella stessa tabella con i nomi o in altra tabella, mettiamo sulla stessa, altrimenti diventa più complesso.
nel ciclo while prelevi anche la città
$citta[$id]=$linea['citta'];
PHP:
<?php
//...
asort($nomi);//ordino l'array alfabeticamente !!usare asort non sort per mantenere corrispondenza chiave=>valore 
foreach($nomi as  => $val_1){
	foreach($nomi as $ch_2 => $val_2){
		if($ch_1 != $ch_2 && $val_1 == $val_2){//verifico che non sia lo stesso dato ma con nomi uguali
			$nomi[$ch_1] .= " (".$citta[$ch_1].")";
			$nomi[$ch_2] .= " (".$citta[$ch_2].")";
		}
	}
}
echo "<select name=\"select\">"; 
foreach($nomi as $chiave => $valore){// e lo ciclo 
    echo  "<option value=\"$chiave\">$valore</option>"; 
} 
echo "</select>"; 
//..... 
?>
dimmi se funzia
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
niente mi restituisce la select vuota


forse,e questo mi sa che è molto difficile, perchè alcuni nomi si ripetono anche 5-6 volte.

boh
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ho fatto una dimenticanza di scrittura nel primo foreach

foreach($nomi as => $val_1){

correggi in
foreach($nomi as $ch_1 => $val_1){

riprova e sappimi dire
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sei sicuro che non funzi?
i nomi delle città seno nella stssa tabella dei nomi delle persone?

PHP:
<?php
//dal while ti si formano due array simili a questi (eventualmente verifica con i var_dump)
$nomi=array( 1 => 'sofonisba', 4 => 'asdrubale', 7 => 'pancrazio', 9 => 'asdrubale', 12 => 'abbondio', 27 => 'pancrazio');
$citta=array( 1 => 'firenze', 4 => 'como', 7 => 'ancona', 9 => 'torino', 12 => 'otranto', 27 => 'palermo');
var_dump($nomi); echo "nomi<br>";
var_dump($citta); echo "citta<br>";
echo "<br>";
asort($nomi);//ordino l'array alfabeticamente !!usare asort non sort per mantenere corrispondenza chiave=>valore
var_dump($nomi);echo "nomi ord<br>";//per verificare l'ordinamento
foreach($nomi as  $ch_1 => $val_1){ 
    foreach($nomi as $ch_2 => $val_2){ 
        if($ch_1 != $ch_2 && $val_1 == $val_2){//verifico che non sia lo stesso dato ma con nomi uguali 
            $nomi[$ch_1] .= " (".$citta[$ch_1].")"; 
            $nomi[$ch_2] .= " (".$citta[$ch_2].")"; 
        } 
    } 
}
echo "<br>";
var_dump($nomi);echo "nomi+citta per nomi uguali<br><br>";//verifica per vedere se nome abbinato a città

echo "<select name=\"select\">";  
foreach($nomi as $chiave => $valore){// e lo ciclo  
    echo  "<option value=\"$chiave\">$valore</option>";  
}  
echo "</select>";  
?>
e questo è l'utput dei var_dump

array(6) { [1]=> string(9) "sofonisba" [4]=> string(9) "asdrubale" [7]=> string(9) "pancrazio" [9]=> string(9) "asdrubale" [12]=> string(8) "abbondio" [27]=> string(9) "pancrazio" } nomi
array(6) { [1]=> string(7) "firenze" [4]=> string(4) "como" [7]=> string(6) "ancona" [9]=> string(6) "torino" [12]=> string(7) "otranto" [27]=> string(7) "palermo" } citta
array(6) { [12]=> string(8) "abbondio" [9]=> string(9) "asdrubale" [4]=> string(9) "asdrubale" [27]=> string(9) "pancrazio" [7]=> string(9) "pancrazio" [1]=> string(9) "sofonisba" } nomi ord

array(6) { [12]=> string(8) "abbondio" [9]=> string(18) "asdrubale (torino)" [4]=> string(16) "asdrubale (como)" [27]=> string(19) "pancrazio (palermo)" [7]=> string(18) "pancrazio (ancona)" [1]=> string(9) "sofonisba" } nomi+citta
si forma anche la <select> ma non l'ho postata perchè avrei dovuto fare un'immagine

comunque subito dopo il wile metti i var_dump per verificare se sis sono formati gli array
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
borgo grazie dell'aiuto, veramente.

scusa ma sto andando fuori fase anche grazei ad un altro problemino con il GET.

comunque sia allora, città al momento non è nella stesas tabella potrei eprò inserircelo se opto erp quella strada in realtà pensavo di affiancarci l'id, cmq sia ho fatto una prova con età

preciso che dopo il while quando richiamo le linee ho dovuto dichiarare
PHP:
 $eta[]=$linea['Eta'];

senza le [] mi restituiva solo l'ultima, dopo di che ho semplificato la query estraedno direttamente un nome che ne ho 5 il risultato non coincide propriamente difatti pare ch eil nome abbia una doppia associazione cmq ti posto il var_dump

array(6) { [0]=> string(2) "29" [1]=> string(2) "29" [2]=> string(2) "26" [3]=> string(2) "24" [4]=> string(2) "23" [5]=> string(2) "28" } eta al psoto di citta


array(6) { [193874]=> string(22) "Adriano () () () () ()" [205122]=> string(10) "Adriano ()" [183240]=> string(10) "Adriano ()" [164082]=> string(10) "Adriano ()" [135530]=> string(10) "Adriano ()" [106019]=> string(10) "Adriano ()" } nomi+eta per nomi uguali

quindi gli array sono aposto il problema forse vine dal foreach però nonc apisco ho copiato incollato epr sicurezza boh
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
dimmi cosa ti danno i var_dump

PHP:
<?php
//.....
$result = mysql_query($sqlquery); 
while ($linea = mysql_fetch_array($result)) { 
    $id=$linea['ID_NAME']; 
	$eta[$id]=$linea['eta'];
    if($linea['Soprannome'] !=""){ 
        $nomi[$id]=$linea['Soprannome']; 
    }else{ 
        $nomi[$id]=$linea['Cognome']." ".$linea['Nome']; 
    } 
} 
var_dump($nomi);//var_dump 1
var_dump($eta);//var_dump 2
asort($nomi);//ordino l'array alfabeticamente !!usare asort non sort per mantenere corrispondenza chiave=>valore  
var_dump($nomi);//var_dump 3
foreach($nomi as $ch_1 => $val_1){ 
    foreach($nomi as $ch_2 => $val_2){ 
        if($ch_1 != $ch_2 && $val_1 == $val_2){//verifico che non sia lo stesso dato ma con nomi uguali 
            $nomi[$ch_1] .= " (".$eta[$ch_1].")"; 
            $nomi[$ch_2] .= " (".$eta[$ch_2].")"; 
        } 
    } 
}
var_dump($nomi);//var_dump 4
echo "<select name=\"select\">";  
foreach($nomi as $chiave => $valore){// e lo ciclo  
    echo  "<option value=\"$chiave\">$valore</option>";  
}  
echo "</select>"; 
//...
?>

mettiamo per ipotesi id nome eta:
27 antonio 35
28 giuseppe 97
29 antonio 15
i var_dump 1 e 2 devono restituiri (non ho contato la lunghezza della stringa)
array(3) { [27]=> string(7) "antonio" [28]=> string(8) "giuseppe" [29]=> string(8) "antonio"}
array(3) { [27]=> string(2) "35" [28]=> string(9) "97"}
coè la chiave di antonio deve essere uguale alla chiave dell'eta di antonio e così via
var_dump 3
array(3) { [27]=> string(7) "antonio" [29]=> string(8) "antonio" [28]=> string(8) "giuseppe"}
var_dump 4
array(3) { [27]=> string(7) "antonio (35)" [29]=> string(8) "antonio (15)" [28]=> string(8) "giuseppe"}

poi non capissco poi cosa sono quei () () () () nel out del var_dump che hai postato
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ti ho posato il due ed il 4 come var dump

praticamente invece di darmi la chiave di antonio la realtiva eta mi da come chiave l'id

e le parentesi escono eprschè forse non trova eta[ch_1] cmq faccio delle prove forse ho individuato cos'è

a bre ve ti faccio sapere
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
cioa
mi sembra che tu abbia messo
$eta[]=$linea['eta'];
per cui l'indice parte da 0 e quindi non corrisponde più con l'id del nome
devi mettere
$eta[$id]=$linea['eta'];
in modo da mantenere la corrispondenza tra nome e sua età
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
cioa
mi sembra che tu abbia messo
$eta[]=$linea['eta'];
per cui l'indice parte da 0 e quindi non corrisponde più con l'id del nome
devi mettere
$eta[$id]=$linea['eta'];
in modo da mantenere la corrispondenza tra nome e sua età

sei un genio, che stupido che sono

funge se non fosse per due problemi ho fatto delle prove ed ho riscontrato questo
poi non capissco poi cosa sono quei () () () () nel out del var_dump che hai postato

in pratica fino a due nomi uguali tutto ok però ad esempio se ne trova 3

Alessandro(29)
Alessandro(32)
Alessandro(34)(34)

se ne trova 4
Adraino(24)
Adriano(26)
Adriano(29)
Adriano(29)(29)(29)

in sostanza ripete le paretensi in funzione dei nomi precedenti uguali che trova

Ultimo problema più grande del rpevisto ed ho paura che non c'è soluzione:crying::crying: e che non ce la fa ad eleaborare tutta la tabella :crying: ho fatto delle prove neld atabse ci sono 14.000 e rotti nomi, ho fatto delle prove con LIMIT finoa 9000 ce la fa poi non ce la fa più e mi restituisce la select vuota :crying:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per il problema del blocco puo essere che, dato l'ato numero di cicli da fara, il tempo di vita dello script non sia sufficiente
prova a mettere all'inizio dello script
PHP:
set_time_limit(240);
cioè ne allunghi il tempo di vita, in genere su ini.php il tempo è impostato a 30 sec, mettendo 240 (a altro più o meno lungo) dovresti farcela

per quanto riguarda la ripetizione ci do un occhio e poi (spero) ti so dire
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
per il problema del blocco puo essere che, dato l'ato numero di cicli da fara, il tempo di vita dello script non sia sufficiente
prova a mettere all'inizio dello script
PHP:
set_time_limit(240);
cioè ne allunghi il tempo di vita, in genere su ini.php il tempo è impostato a 30 sec, mettendo 240 (a altro più o meno lungo) dovresti farcela

per quanto riguarda la ripetizione ci do un occhio e poi (spero) ti so dire

:crying: niente da fare


Fatal error: Maximum execution time of 30 seconds exceeded

e indica proprio la riga dove inizia il foreach
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ciao
sembra che non prenda l'istruzione, prova a settarlo su ini.php

niente da fare l'hosting non lo permette

l'unica e spezzetare la query ma trattandosi di una select non saprei come fare nel senso che poi non mi si ordina più tutto all'interno della select, a meno che non faccio due query e chiamo sempre $nomi il risultato unendo i due array

almeno epnso si pos fare,spero :crying:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
niente da fare l'hosting non lo permette
cambiare hosting
non credo che basti suddividere la query, se fai (es) tre query il tempo e sempre lo stesso
si dovrebbe richiamare lo script (cioè farlo ripartire) tante volte quante serve in modo da ridurre il tempo (per ciascuna chiamata) ad un massimo di 30 sec
se mi viene qualche idea te la posto
 
Discussioni simili
Autore Titolo Forum Risposte Data
T come ordinare dei record recuperati da due tabelle MySQL 0
otto9due Ordinare option di una select Javascript 5
felino [C#] Ordinare un livello specifico di un custom tree .NET Framework 0
G Ordinare un array multidimensionale PHP 4
M Ordinare una query join PHP 2
L [PHP] ordinare per data PHP 3
F [HTML] Google fogli ordinare per colonne HTML e CSS 0
P [PHP] ordinare un array multidimensionale in modo personalizzato PHP 2
T [PHP] ordinare un campo varchar che contiene numeri PHP 6
Trapano Query in php come ordinare per data e anche per ora PHP 7
L [PHP] ordinare xml PHP 0
Trapano [HTML] Ordinare indirizzi, creando un percorso HTML e CSS 3
M Ordinare i valori in query group by PHP 4
L Ordinare articoli dentro categorie e tag in ordine alfabetico wordpress WordPress 1
M Ordinare array (multidimensionale)? PHP 3
ste80 ordinare dati da file di testo PHP 3
R Ordinare alfabeticamente partendo da una PAROLA MySQL 0
M Ordinare visualizzazione record tramite form con input "text" PHP 2
xone Ordinare tramite menù a tendina i risultati di una query già stampati MySQL 0
M Ordinare array multidimensionale con esclusioni Javascript 0
M [PHP]Ordinare dati secondo prezzo PHP 2
borgo italia ordinare un array bidimensionale Snippet PHP 0
zighy ordinare risultati specifici PHP 20
D Ordinare i risultati di una query dalla fine della tabella MySQL 13
ivarello Ordinare dati Var in ordine numerico PHP 9
C Ordinare parole in base alla lunghezza PHP 1
Trapano Ordinare risultati MySQL 6
C Ordinare array in base alla lunghezza dei valori PHP 3
C Ordinare array multidimensionali PHP 0
T.W. Aiuto Per Ordinare Risultati Ricerca Da File CSV PHP 2
C Ordinare alfabeticamente un array e ordinare un secondo array in funzione del primo. Javascript 12
valient13 ordinare in ordine decrescente la lista PHP 2
F Ordinare array bidimensionale PHP 2
P [ASP] [Grauito] Ordinare categoria (era: reder by Cat) Offerte e Richieste di Lavoro e/o Collaborazione 1
G Ordinare query PHP 2
P Ordinare e impaginare una tabella contemporaneamente Javascript 1
novello88 MySQL ORDER BY [Era: ordinare i risultati di una database MySQL] MySQL 1
R Ordinare array in base al valore PHP 7
S ordinare array di date PHP 4
R Come ordinare gli articoli per data? Webdesign e Grafica 5
Monital ordinare in una tabella risultati query PHP 10
G ordinare i risultati di una query PHP 4
R Ordinare array in base al valore e alla key PHP 1
A Ordinare query sql in base ai risultati di ricerca PHP 1
M Ordinare il secondo elemento di uno split() PHP 10
N Ordinare per totali Database 0
G VBA e ordinare celle relativamente in Excel 2007 Windows e Software 0
S - Ordinare files uplodati - PHP 0
frankiedeguello Ordinare file per data di creazione PHP 1
T Ordinare dati di un Recordset [era:Grosso problema, chi mi aiuta?] Classic ASP 2

Discussioni simili