PDA

View Full Version : [MYSQL] query su tre tabelle


slyx
03-10-2013, 17:36
Salve a tutti
preannunciando che sono alle prime armi con msql :D

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

PHØΞИIX
04-10-2013, 09:40
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.

slyx
04-10-2013, 09:49
mi sono espresso uno schifo
ogni agente ha più clienti
raggiunto un numero di clienti ha come bonus un livello più alto di provvigioni

PHØΞИIX
04-10-2013, 10:18
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.

slyx
04-10-2013, 10:31
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 ?:mc:

PHØΞИIX
04-10-2013, 11:11
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
)

slyx
04-10-2013, 11:31
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:D
grazie grazie

slyx
04-10-2013, 12:20
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);


?>

PHØΞИIX
04-10-2013, 12:27
Delego.. Non sono pratico di PHP.. :ops:

slyx
04-10-2013, 12:41
ahahaha grazie hai gia fatto tanto :D :D

slyx
04-10-2013, 14:12
ok risolto anche il php...
PHØΞИIX visto che sei pratico di sql posso solo farti un'altra domandina??

slyx
04-10-2013, 15:46
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


:muro: :muro: :muro: :muro:

PHØΞИIX
08-10-2013, 14:00
Semplice, la WHERE condition va definita prima della GROUP BY..

Ti rimando alla documentazione con la sintassi della SELECT: SELECT STATEMENT (http://dev.mysql.com/doc/refman/5.0/en/select.html)

slyx
08-10-2013, 15:17
grazie mille risolto :d