[MySQL] ricerca per data...

  • Creatore Discussione Creatore Discussione ric
  • Data di inizio Data di inizio

ric

Nuovo Utente
20 Lug 2017
5
0
1
41
Buongiorno a tutti,
sono veramente all'inizio con mysql e non riesco a risolvere il seguente problema:

Ho 3 tabelle:

tbl_officina
->id_officina(chiaveprimaria)
->nome_officina
->ecc....

tbl_clienti
->id_cliente(chiaveprimaria)
->nome_cliente
->ecc....

tbl_storico_riparazioni
->id_officina
->id_cliente
->data_riparazione

Scrivere una query che per ogni cliente mi mostri -solamente- l'ultima riparazione effettuata e l'officina che ha effettuato la riparazione.

Come faccio?
grazie1000
 
ciao
prima di procedere due osservazioni:
nella tabella tbl_storico_riparazioni ha messo un id_roarazione primarykey?
agli id primarykey è meglio dare l'autoincrement
 
No, al momento nella tb_storico_riparazioni non ho impostato un campo id_riparazione come primarykey.
id_officina e id_clienti sono gia impostati come autoincrement
 
OK inserisco il campo id_riparazioni nella tbl_storico_riparazioni .
Adesso le tabelle sono le seguenti:

tbl_officina
->id_officina(chiaveprimaria autoincrement)
->nome_officina
->ecc....

tbl_clienti
->id_cliente(chiaveprimaria autoincrement)
->nome_cliente
->ecc....

tbl_storico_riparazioni
->id_riparazione(chiaveprimaria autoincrement)
->id_officina
->id_cliente
->data_riparazione

e adesso?
 
ciao
ti schematizzo, immagino che tu utilizzi php
provala e sappimi dire
PHP:
<?php
//dati di connessione
//fai una query di join dando i vari alias
$qyery="SELECT
        r.data_riparazione as data, o.nome_officina as officina, c.nome_cliente as cliente
        FROM tbl_storico_riparazioni as r, tbl_officina as o, tbl_clienti as c
        ORDER BY r.data_riparazione DESC LIMIT 1";
$ris=mysqli_query($connessione, $qyery);
$riga=mysqli_fetch_assoc($ris);
echo "ultima riparazione in data ".$riga['data']." c/o ".$riga['officina']." cliente ".$riga['cliente'];
mysqli_close($ris);
?>

visto dopo: ok tabelle
 
Grazie Borgo, sto testando la query direttamente in phpmyadmin e il risultato è che la query mostra un singolo record con il massimo di 'data_riparazione', invece io sto cercando di mostrare tutti i clienti con la loro ultima (e quindi max) 'data_riparazione' e quindi officina che ha effettuato la riparazione.
 
prova così, se per caso funziona,
PHP:
SELECT sr.id_officina, o.nome_officina, sr.id_cliente, c.nome_cliente, MAX(sr.data_riparazione) as data_riparazione
FROM tbl_storico_riparazioni sr
LEFT JOIN tbl_officina o on sr.id_officina = o.id_officina
LEFT JOIN tbl_clienti c on sr.id_cliente = c.id_cliente
GROUP BY sr.id_officina, o.nome_officina, sr.id_cliente, c.nome_cliente
 
quasi.....viene visualizzato piu volte lo stesso cliente, con l'ultima data di riparazione, per ogni officina.
A questo punto io penso che dovrei prendere il max datariparazione relativo ad ogni cliente , idcliente e idofficina e metterli in una tabella, giusto? e come?
 
quasi.....viene visualizzato piu volte lo stesso cliente
giusto per essere certi che il risultato è corretto, questa è l'immagine della query eseguita .....

upload_2017-7-20_17-9-30.png
 

Discussioni simili