Problema query ordine di visualizzazione

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ciao a tutti!! Ho un problema al quale non trovo soluzione:

Ho un DB dove una persona si può registrare ed inserire vari messaggi.
Visualizzo i messaggi 10 per pagina:
PHP:
$query= "select * from messaggi where (tipo= 'Messaggio')...ORDER BY $data LIMIT $from, $max_results";

fino a qui tutto bene ma vorrei avere la possibilità di decidere che il primo mess visualizzato sia di una determinata persona se ha un messaggio che risponde ai where altrimenti non lo tengo in considerazione.

Per ogni messaggio ovviamente ho un campo id_registrato

Chi voglio visualizzare per primo lo inserisco in una tabella del DB con il relativo id_registrato

I dubbi a questo punto mi assalgono:
1) potrei fare in modo di visualizzar solo 9 messaggi (invece di 10) con la prima query e con una seconda visualizzare il messaggio del registrato che voglio visualizzare per primo ma così l'utente troverà prima o poi lo stesso messaggio 2 volte..
2) e se avessi più di un registrato "preferito" e magari le prime tre posizioni da controllare...

Non so se sono riuscita a spiegarmi bene ma se qualcuno ha capito il mio problema mi può dire dove posso andare a parare?
Ma esiste una soluzione al mio problema?:dipser:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
non so se sia capace di risolverti, però per capire meglio si dovrebbe sapere come sono organizzate le tabelle interessate. dovresti postare la loro (o sua) strutura
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Struttura della tabella `registrati`
--

CREATE TABLE IF NOT EXISTS `registrazioni_agenti` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(60) NOT NULL,
`provincia` varchar(50) NOT NULL,
`tel` varchar(15) NOT NULL,
`email` varchar(50) NOT NULL,
`utente` varchar(50) NOT NULL,
`password` varchar(20) NOT NULL,
`sito` varchar(50) default NULL,
PRIMARY KEY (`id`)
)

Struttura della tabella `messaggi`
--

CREATE TABLE IF NOT EXISTS `immobili` (
`id` int(11) NOT NULL auto_increment,
`descrizione` longtext NOT NULL,
`tipologia` varchar(50) NOT NULL,
`id_registrato` int(11) NOT NULL,
`date` date default NULL,
`visite` int(11) NOT NULL default '0',
`n_foto` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `id_registrato` (`id_registrato`)
)

Se non viene specificato un ordine di visualizzazione visualizzo i messaggi in ordine di data DESC altrimenti l'utente può decidere se visualizzarli per numero di foto (valore che assume $visualizza), ecc..

Ne visualizzo 10 per pag ma vorrei che la prima posizione sia del registrato con un determinato id e questo solo nella prima pag ma non voglio che si visualizzi lo stesso messaggio 2 volte!

Ditemi se non sono stata ancora abbastanza chiara ad esporre il mio problema...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
spezziamo il problema in due e vediamo se ho capito
1. l'utente può scegliere se visualizzare in base alla data o in base al numero di foto, immagino che faccia questo tramite piccolo form con (es) due radiobutton

<input name="scelta" type="radio" value="data">
<input name="scelta" type="radio" value="foto">

prima della select poi mettere un if

if(?_POST['scelta']="data"){
$ordine="ORDER BY date DESC";//desc o asc
}else{
$ordine="ORDER BY n_foto DESC";
}

la select sarà

"SELECT * from immobili ..se ci sono aclausole where.... $ordine ....LIMIT......", attenta agli spazi tra $ordine ed es LIMIT che se non metti spazio diviene ORDER BY date DESCLIMIT e non funzia
2. la seconda è un tantino più complessa ci penso poi ti so dire

p.s.
per i due radio button potrebbe esserci il sistema di non utilizzare il tasto di submit credo tramite js, ma questo non so come si faccia
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
il fatto di scegliere in che ordine visualizzare l'ho già risolto in passato l'unico punto che mi manca è il 3
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
in questo modo:
HTML:
<p class="carattere_sito">Visualizza messaggi in ordine di <a href=ricerca.php?visualizza=foto&... (altre clausole per i where passate in php)...">FOTO</a><a href=ricerca.php?visualizza=data&... (altre clausole per i where)...">DATA</a></p>

Questo è ok

è il dare visibilità per primo ad un determinato registrato il mio problema
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
l'unica cosa (orribile) che mi è venuta in mente è quella di modificare la tabella immobili

CREATE TABLE IF NOT EXISTS `immobili` (
`id` int(11) NOT NULL auto_increment,
`descrizione` longtext NOT NULL,
`tipologia` varchar(50) NOT NULL,
`id_registrato` int(11) NOT NULL,
`visibilita int(1) default 9,
`date` date default NULL,
`visite` int(11) NOT NULL default '0',
`n_foto` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `id_registrato` (`id_registrato`)
)

poi tu puoi assegnare un numero es 0 a chi ti interessa

e fare ORDER BY visibilita, id_registrato...
in questa maniera potresti anche graduare la visibilità
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
ma aspetta... stai dicendo che posso dare più variabili alla funzione order by?

Cioè se il campo visibilità del registrato che mi interessa lo metto a 1 e poi faccio una query così:

PHP:
$query= "select * from messaggi where ..(clausole where).. order by visibilita DESC, n_foto DESC";

mi visualizza prima i registrati che hanno visibilita 1 e quando arrivo ai registrati che hanno visibilità 0 li mette in ordine di numero di foto?

Ma davvero può funzionare così? sarei davvero un' ignorante! nel senso che ignoravo...:p ma ho capito bene il funzionamento?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ma aspetta... stai dicendo che posso dare più variabili alla funzione order by?
si
es se metto order by cognome, nome
Zichicchi, Aldobrando
Rossi , Mario
Rossi, Giuseppe
Bianchi, Tonino
ordina
Bianchi Tonino
Rossi Giuseppe
Rossi Mario
Zichicchi Aldobrando

mi visualizza prima i registrati che hanno visibilita 1 e quando arrivo ai registrati che hanno visibilità 0 li mette in ordine di numero di foto?

dipende, se non gli dici nulla
prima
0
n_foto 1
n_ foto 27
1
n_foto 10
ecc
io per esempio in un mio sito ho order by sigla_provincia, comune, ...
estrae prima la sigla più bassa con tutti i suoi comuni, poi la sigla successiva
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Grazie mille!!!! Stavo impazzendo e alla fine era così semplice...:hammer:
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Mi rimane però il problema che se ho 10 messaggi dello stesso registrato e tutti e 6 rispondono ai where non avrò la prima o le prime due posizioni del mio preferito ma le prime 10.. cioè tutta una pagina e mi sempbra eccessivo....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
hai ragione
se hai 10 messaggi con ordine visualizzazione = 0, tutti vengono visualizzati per primi

ci penso come al solito, e poi "forse" ti so dire
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
non ti scrivo il codice in quanto mi sembra che tu lo sappia fare, ma ti indico una possibile strada (anche questa orribile)
tu hai la tabella immobili (che è quella dei 10 record per pagina?)

`id`
`descrizione`
`tipologia`
`id_registrato` (è immagino quello a cui devi dare la preferenza)
`visibilita (in teoria di default hai un numero alto, io avevo messo 9)
`date`
`visite`
`n_foto`

quindi inizialmente tutti hanno la stessa visibilità
per favorire un registrato uppi la tabella probabilmente fai così prendendo l'id_registrato da un form
UPDATE immobili SET visibilita='0' WHERE id_registrato='121'
un metodo per diminuire gli "eletti" potrebbe essere mettere un altra condizione es
AND n_foto >'32' AND data >'$data_mese_fa' (qui si evidenzia l'utilità del time stamp), aumentando le condizioni
evidentemente diminuisci il numero (ma possono essere comunque più di dieci)
di record con lo stesso id_registrato con visibilita=0

se invece vuoi metterene solo uno potresti
SELECT id, MAX(data) FROM immobili WHERE id_registrato='121'
ti estrae l'id del record con la data maggiore (l'ulima inserita da registrato)
per cui l'uppa di prima diventa
UPDATE immobili SET visibilita='0' WHERE id='estratto'
e quindi il registrato eletto appare per primo con un record, con tutti gli altri con l'ordine
che hai prestabilito nella seconda clausola di ORDER BY

se invece vuoi avere anche la libertà di scegliere quanti record dell'eletto appaiono per primi potresti procedere così

$id_registrato da form
$num-in_prima= da form indicando quanti suoi record appaiano per primi

fai un array $id=array()

SELECT id FROM immobili WHERE id_registrato='$id_registrato' ORDER BY !!importante che tu dia un ordine che ti serva!!
fai la solita query ed il ciclo while per estrarre tutti gli id
while($riga=misql_fetch_array(..................
$id[]=$riga['id']

poi un ciclo for

for($k=0; $k<$num-in_prima;$k++){
UPDATE immobili SET visibilita='0' WHERE id='$id[$k]

}

se es hai messo $num-in_prima=4 uppi a visibilita 0 solo 4 record del tuo è preferito

fai le tue prove poi sappimi dire
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
si ma nella mia pag ricerca.php ci arrivo tramite un form dove gli passo:
provincia
tipologia
prezzo
ecc...

Quindi la mia query è:
PHP:
$query= "select * from immobili where (pubblicato= 1) ";
if ($tipologia!='')
    $query.= "&&(tipologia = '$tipologia') ";
if ($contratto!='')
    $query.= "&&(contratto = '$contratto') ";
if ($provincia!='')
    $query.= "&&(provincia = '$provincia') ";
if ($comune!='')
    $query.= "&&(comune = '$comune') ";
if ($pmin!='')
    $query.= "&&(prezzo>= {$pmin}) ";
if ($pmax!='')
    $query.= "&&(prezzo<= {$pmax}) ";
if ($smin!='')
    $query.= "&&(superficie>= {$smin}) ";
if ($smax!='')
    $query.= "&&(superficie<= {$smax}) ";
	
if($visualizza)
	$query .= " ORDER BY $visualizza";
	else $query .= " ORDER BY priorita DESC,n_foto DESC, rand()";
come vedi mi sono sbizzarrita con l'order by...
priorita l'avevo già messo di default 0....

TI FACCIO IL PUNTO:
un registrato può avere immobili di varie tipologie, ecc...

Faccio l'esempio che il registrato id=100 ha 5 garage e un posto barca

-Seguendo il tuo consiglio uno solo di questi immobili avrà priorità.
Mettiamo che l'ultimo inserito o quello con più foto sia il posto barca(quindi l'immobile con priorità).
Se nel form viene selezionato posto barca allora vedrò per primo il registrato id=100, mentre se selezionato garage non avrò per primo il registrato id=100 (botte di c...ehm fortuna a parte).

-secondo tentativo:
Metto priorità a tutti gli immobili del registrato.
Ma in questo caso se viene selezionato garage avrò il registrato con priorità in tutte le prime 5 posizioni....

ma secondo te esiste davvero una soluziona al mio problema con php?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
Faccio l'esempio che il registrato id=100 ha 5 garage e un posto barca
tu hai sei record con
id id_reg tipo visibilita
10 100 garage 9
11 100 garage 9
12 100 garage 0
13 100 garage 9
14 100 barca 9

piu tutti gli altri
se fai es select ORDER BY visibilita, tipo

12 100 garage 0
14 100 barca 9
10 100 garage 9
11 100 garage 9
13 100 garage 9

giostrando su where e su order by,

poi come ti ho detto puo attribuire a N immobili con id_reg = 100 visibilità 0.
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ciao, ora ho inquadrato la procedura che mi suggerisci vedrò di giocarci un pò a seconda delle mie esigenze..
Grazie per l'aiuto, ultimamente sei sempre tu a tirarmi fuori dai problemi!!:tifoso:
 
Discussioni simili
Autore Titolo Forum Risposte Data
O problema con query PHP 4
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
M Problema su query JOIN in tre tabelle PHP 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
A [PHP] Problema query insert [RISOLTO] PHP 14
M [PHP] Problema con query select PHP 2
T [php] problema creazione query select-where PHP 5
V [MySQL] problema query con date su server MySQL 5
trattorino problema raccapricciante php conteggio query PHP 4
L [PHP] Problema creazione query a numero di parametri variabile PHP 6
G Mysql ( Query) problema interrogazione MySQL 0
D Problema con query in php PHP 5
E [PHP] problema insert query PHP 9
M [PHP] Problema con query PHP 17
Rikk73 [C#] problema con stampa da query linq EnumerableRowCollection .NET Framework 0
M Problema con query PHP 15
G Problema con una query. PHP 5
F problema su query con nome tabella variabile PHP 20
G problema query mysql in php PHP 5
F PHP problema doppi apici all'interno di una query SQL PHP 1
M problema con media query CSS HTML e CSS 1
D Problema caratteri jolle su criterio Query MS Access 0
L problema creazione query con campo float PHP 2
elpirata Query di ricerca problema campo data italiano PHP 2
andrea.peo Problema query con join visualizzazione record ripetuti PHP 5
X Problema di sostituzione tramite query sql MySQL 5
S Problema Query PHP 2
S Problema query PHP 25
Emix Problema query inserimento... PHP 6
B problema query PHP 6
Emix Dubbio e problema su query con operatore LIKE PHP 56
S Problema query con sum MySQL 4
G Problema con query mysql MySQL 1
B problema query mysql php PHP 1
L PHP: problema con query mysql. PHP 3
A problema query e javascript Javascript 0
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
D E' natale lo so... ma ho un problema su una query :S MySQL 7
Boscagoo Problema query mySQL MySQL 6
L query sqlite problema PHP 3
EffeElle Php problema query select PHP 5
Trapano Problema con query MySQL 32
EffeElle Problema per una query di aggiornamento record php PHP 35
M Problema query MySQL MySQL 13
V Problema query PHP 3
Longo8 Problema query in rete PHP 3
K problema con query complessa MySQL 4
K [MYSQL] problema con una query in loop MySQL 1

Discussioni simili