|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
[MYSQL] query su tre tabelle
Salve a tutti
preannunciando che sono alle prime armi con msql ![]() sto cercando di aiutare un amico con un gestionale per la sua attività mi trovo in una condizione con tre tabelle con la stessa chiave : Tabella: agente cliente schema_provv Chiavi: agente_id agente_id agente_id e num_provv dovrei con una query aggiornare il valore num_provv relativo all'agente_id se i clienti con agente_id sono più di un determinato numero.... è possibile tutto ciò qualche anima pia mi aiuti grazie |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2007
Città: Albiolo (CO)
Messaggi: 165
|
Da come l'hai descritto, ci sarà sempre e solo un cliente con un determinato agente_id, siccome agente_id è chiave primaria (e quindi ha un valore univoco) della tabella cliente.
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
mi sono espresso uno schifo
ogni agente ha più clienti raggiunto un numero di clienti ha come bonus un livello più alto di provvigioni |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Sep 2007
Città: Albiolo (CO)
Messaggi: 165
|
Questo non risolve il problema perchè la chiave primaria della tabella cliente è sempre agente_id.
Sarebbe più sensata una strutturazione delle tabelle in questo modo: tabella AGENTE --> PK: agente_id tabella CLIENTE --> PK: cliente_id, FK: agente_id tabella SCHEMA_PROVV --> Ti direi agente_id-num_provv come chiave primaria composta, ma non ho capito bene la funzione di questa tabella. Con una strutturazione del genere sarebbe possibile pensare ad una soluzione per ciò che chiedi. |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
ho detto di essere un pivello infatti...ahah
le chiavi primarie sono diverse per ogni tabella la mia domanda è posso con un select sommare i clienti con lo stesso agente e se questo valore è maggiore di 4 nella tabella schema faccio un update ad un determinato campo dello stesso agente ? ![]() |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Sep 2007
Città: Albiolo (CO)
Messaggi: 165
|
Premetto che non ne ho verificato la correttezza, ma la query dovrebbe essere una cosa del genere
UPDATE schema_provv AS sp SET sp.num_provv = [valore che vuoi settare] WHERE sp.agente_id IN ( SELECT c.agente_id FROM cliente AS c GROUP BY c.agente_id HAVING COUNT(c.cliente_id) > 4 ) |
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
grazie mille
perfetta in navicat sql dove stavo facendo le prove.... errore su mysql aruba dove la volevo schedulare... la eseguo via php dovrebbe andare ![]() grazie grazie |
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
Un php così dovrebbe andare?
<?php $connessione = mysql_connect("localhost","root","root")or die("Connessione non riuscita: " . mysql_error()); print ("Connesso con successo"); mysql_select_db("PROVA", $connessione) or die("Errore nella selezione del database"; $query = "UPDATE schema_provv AS sp SET sp.num_provv = [valore che vuoi settare] WHERE sp.agente_id IN ( SELECT c.agente_id FROM cliente AS c GROUP BY c.agente_id HAVING COUNT(c.cliente_id) > 4 ) // invio la query $result = mysql_query($query); // controllo l'esito if (!$result) { die("Errore nella query $query: " . mysql_error()); } mysql_close($connessione); ?> |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Sep 2007
Città: Albiolo (CO)
Messaggi: 165
|
Delego.. Non sono pratico di PHP..
![]() |
![]() |
![]() |
![]() |
#10 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
ahahaha grazie hai gia fatto tanto
![]() ![]() |
![]() |
![]() |
![]() |
#11 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
ok risolto anche il php...
PHØΞИIX visto che sei pratico di sql posso solo farti un'altra domandina?? |
![]() |
![]() |
![]() |
#12 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
vabbè io la faccio
mi aiuteresti a capire cosa sbaglio?? SELECT o.agente_id ,CURRENT_DATE as dat,data_aggiunta FROM ordini AS o GROUP BY o.agente_id WHERE DATEDIFF(dat,ordini.data_aggiunta) < 30 ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Sep 2007
Città: Albiolo (CO)
Messaggi: 165
|
Semplice, la WHERE condition va definita prima della GROUP BY..
Ti rimando alla documentazione con la sintassi della SELECT: SELECT STATEMENT |
![]() |
![]() |
![]() |
#14 |
Junior Member
Iscritto dal: Nov 2010
Messaggi: 9
|
grazie mille risolto :d
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:24.