Trigger per piacere qualcuno mi aiuti

martedì 05 giugno 2012 - 21.37
Tag Elenco Tags  Windows XP  |  MySQL 5.5  |  Firefox

gigimac Profilo | Newbie

Ciao a tutti sono nuovo di questo forum,mi sonoiscritto su diversi forum prima diquesto ma nessuno mi a saputo aiutare e spero sinceramente che qui le cose siano diverse.

Praticamente devo creare due trigger:
1trigger:Il bene venduto deve afferire alla categoria di vendita del corrispondente venditore

le tabelle che vengono prese in considerazione sono:
BENE(Id_bene, Descrizione, Scadenza, PrezzoUnitario,QuantitàTot,Categoria)
la kiave è Id_bene

VENDE( Venditore,Bene, DataInserzione)
la kiave è Venditore,Bene

VENDITORE( P_iva, RagioneSociale,Categoria,E_mail)
la kiave è P_iva

N.B Venditore e P_iva sono la stessa cosa e Bene e Id_bene,lo stesso.

2 trigger:Verificare che la quantità totale di bene coincida perfettamente con quello dell'offerta

altra tabella che serve a mio avviso per il 2trigger è:
ACQUISTATO( Bene, Transazione, Quantità)
la kiave è Bene,Transazione

Per quanto riguarda questo secondo trigger hoscritto qualcosa ma non so come scriverlo sotto forma di triger :
(NOT EXISTS(SELECT *
FROM bene B
WHERE QuantitàTot < (SELECT SUM(Quantità)
FROM acquistato
WHERE Bene= B.Id_bene)))

Vi prego aiutatemi sono disperato perchè tra pochi giorni devo consegnare un progetto e mi manca solo questo
Ps. utilizzo MySql versione 5.20
e come interfaccia heidiSql

alx_81 Profilo | Guru

>Ciao a tutti sono nuovo di questo forum,mi sonoiscritto su diversi
>forum prima diquesto ma nessuno mi a saputo aiutare e spero sinceramente
>che qui le cose siano diverse.
Ciao gigimac e benvenuto su dotnethell.it


>Praticamente devo creare due trigger:
Perdonami ma il primo non ho capito cosa deve fare. Quando dovrebbe essere scatenato? E cosa dovrebbe succedere? Ma soprattutto.. su che tabella devi applicarlo?
Vuoi controllare l'inserimento di un bene e determinare se la categoria è contenuta in un'altra tabella?
Prova a spiegarmi la situazione reale in dettaglio per favore.

>2 trigger:Verificare che la quantità totale di bene coincida perfettamente con quello dell'offerta
offerta? e dove sta? La tabella proposta è per gli acquisti..

>Vi prego aiutatemi sono disperato perchè tra pochi giorni devo
>consegnare un progetto e mi manca solo questo
>Ps. utilizzo MySql versione 5.20
>e come interfaccia heidiSql
Ti assicuro che per come hai esposto il problema non è per niente facile darti una mano. Mancano troppi elementi. Dovresti postar uno script per creare le tabelle (in SQL standard) giusto per condividere le strutture. Poi spiegare cosa deve succedere in base a quello che vuoi fare (quale comando, insert, update, ecc) e infine cosa vuoi che succeda.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gigimac Profilo | Newbie

Ciao Alessandro allora incomincio con il primo trigger ...lo script delle tavole sono:

DROP TABLE IF EXISTS 'venditore';
CREATE TABLE IF NOT EXISTS `venditore` (
`P_iva` CHAR(10) NOT NULL,
`RagioneSociale` VARCHAR(30) NOT NULL,
`Categoria1` VARCHAR(50) NOT NULL,
`Categoria2` VARCHAR(30) NULL DEFAULT NULL,
`E_mail` VARCHAR(40) NOT NULL,
`Url` VARCHAR(50) NOT NULL,
`Tel` VARCHAR(20) NOT NULL,
`Cell` VARCHAR(20) NULL DEFAULT NULL,
PRIMARY KEY (`P_iva`)
)

DROP TABLE IF EXISTS 'vende';
CREATE TABLE IF NOT EXISTS `vende` (
`Venditore` VARCHAR(30) NOT NULL,
`Bene` INT(10) NOT NULL,
`DataInserzione` DATE NOT NULL,
PRIMARY KEY (`Venditore`, `Bene`),
INDEX `FK_vende_bene` (`Bene`),
CONSTRAINT `FK_vende_bene` FOREIGN KEY (`Bene`) REFERENCES `bene` (`Id_bene`)ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_vende_venditore` FOREIGN KEY (`Venditore`) REFERENCES `venditore` (`P_iva`)ON UPDATE CASCADE ON DELETE CASCADE
)

DROP TABLE IF EXISTS 'bene';
CREATE TABLE IF NOT EXISTS `bene` (
`Id_bene` INT(10) NOT NULL AUTO_INCREMENT,
`Descrizione` VARCHAR(100) NOT NULL,
`Scadenza` DATE NOT NULL,
`PrezzoUnitario` DOUBLE NOT NULL,
`QuantitàTot` INT(3) NOT NULL,
`UnitàMisura` VARCHAR(45) NULL DEFAULT NULL,
`Categoria` VARCHAR(40) NOT NULL,
PRIMARY KEY (`Id_bene`)
)

Il trigger deve fare questo: inserisco un venditore,il quale può vendere una o max 2 categorie di bene.
Dopodichè vado nella tabella bene,inserisco un bene ed specifico anche la categoria a cui appartiene il bene ; il trigger in questione deve controllare che la categoria del bene corrisponde ad almeno una categoria del venditore.
Il controllo lo deve fare nella tabella vende,nella quale inserisco la p_iva del venditore,l'id del bene e l'inserzione del bene da parte del venditore e li si deve eseguire il controllo: se la categoria del bene non corrisponde ad almeno una categoria del venditore mi deve fare qualcosa ad esempio segnalarmi un errore e farmi comparire un messaggio
Spero di essere stato più chiaro adesso :) grazie mille attendo tue risp

alx_81 Profilo | Guru

>Il trigger deve fare questo: inserisco un venditore,il quale
>può vendere una o max 2 categorie di bene.
Quind, vuoi PRIMA inserire, poi APPENA DOPO scatenare un trigger, corretto?

>Dopodichè vado nella tabella bene,inserisco un bene ed specifico
>anche la categoria a cui appartiene il bene ;
e questo lo deve fare già il trigger? Oppure stiamo parlando di due insert? La prima suddetta e la seconda questa?
Insomma non è chiaro QUANDO e DOVE deve partire il trigger.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gigimac Profilo | Newbie

Inserisco il venditore ed in particolare il valore per Categoria 1 e se ne ha 2 anche Categoria2
e non attivo nessun trigger .

Dopodiche vado nella tabella bene e inserisco il bene,e non attivo nessun trigger.

Dopo vado nella tabella vende inserisco il venditore il bene e la data dell'inserzione e qui attivo il trigger,
in questa tabella vado a fare il confronto per vedere se la categoria del bene è uguale a quella del venditore
e se non è uguale attivo il trigger avvertendomi che la categoria del venditore non corrispone con quella del bene.

alx_81 Profilo | Guru

>Inserisco il venditore ed in particolare il valore per Categoria
>1 e se ne ha 2 anche Categoria2
>e non attivo nessun trigger .
Già qui vedo un problema di normalizzazione. Sarebbe meglio avere una relazione 1:N tra categoria e venditore.

>Dopo vado nella tabella vende inserisco il venditore il bene
>e la data dell'inserzione e qui attivo il trigger,
>in questa tabella vado a fare il confronto per vedere se la categoria
>del bene è uguale a quella del venditore
>e se non è uguale attivo il trigger avvertendomi che la categoria
>del venditore non corrispone con quella del bene.
ok allora vuoi fare rollback dell'inserimento nel caso in cui la categoria non corrisponda a quella del venditore.
Allora, la sintassi per creare un trigger su MySQL è la seguente:
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

a questo punto dovrai controllare se sulla tabella bene esiste la categoria, e l'exists può andare. Con la relazione è una sola query, altrimenti dovrai o farne due, o usare una COALESCE (http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#function_coalesce) con la quale torni il primo valore NON NULL di una serie di campi (ad esempio categoria 1 e 2).

Se l'exists non torna nulla o se il risultato della coalesce torna null, allora fai ROLLBACK della transazione.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gigimac Profilo | Newbie

ciao alex finalmente stamattina ci sono riuscito tutto ok adesso stavo riscontrando un problema in una query che non riesco a fare mica me la potresti dare una mano??

la query è la seguente: "Tutte le coppie di acquirenti che hanno comperato un bene dallo stesso venditore e che si sono scambiati almeno un messaggio di posta privata"

Le tavole che penso servano a fare la seguente interrogazione sono:
COMPRA(Acquirente, Bene) entrambi sono chiavi
VENDE(Venditore,Bene,DataInserzione) le chiavi sono Venditore e Bene
MESSAGGIO(Id_messaggio,Oggetto,Testo,Mittente,Timestamp) la chiave è Id_messaggio che è un numero autoincrementato
RICEVE(Acquirente,Messaggio) entrambe sono chiavi

ho provato a fare in diversi modi ma non ci riesco

alx_81 Profilo | Guru

>ciao alex finalmente stamattina ci sono riuscito tutto ok adesso
>stavo riscontrando un problema in una query che non riesco a
>fare mica me la potresti dare una mano??
Ciao,
dovresti postare gli script SQL di CREATE TABLE, qualche dato e il risultato che ti aspetti.
Inoltre, per le prossime volte, apri un nuovo post se cambi l'argomento.
grazie
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gigimac Profilo | Newbie

Ok adesso apro un nuo post cmq ci sono quasi mi serve solo un piccolo aiuto..il post lo chiamo query impossibile ^_^

alx_81 Profilo | Guru

>Ok adesso apro un nuo post cmq ci sono quasi mi serve solo un
>piccolo aiuto..il post lo chiamo query impossibile ^_^
mi raccomando, indica bene tutti i dati, così è più semplice capire il requisito.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5