bank_sql/
wesweb01/bank_sql/PREP/QUERIES.sql1 lines
-- Lista på SQL-satser som jag har tänkt använda i min bank.
-- Många satser använder PDO-parametrar, exempelvis :username
-- Lägg till användare
INSERT INTO user(username, passwordHash, passwordSalt) VALUES (:username, :passwordHash, :passwordSalt);
-- När man loggar in
-- Lösenordhashen och saltet hämtas, och jämförs med användarinmatningen på PHP-servern.
SELECT userId, passwordHash, passwordSalt FROM user WHERE username=:username;
--Skapade en vy för att visa ett specifikt bankkontos transaktioner, där amount-parametern är positiv för mottagande transkationer och negativ för utgående.
CREATE VIEW userAccountTransactionView AS
SELECT
t.transactionId,
t.transactionTypeId,
t.date,
tt.text transactionText,
CASE WHEN t.recipientAccountId = a.accountId THEN t.amount WHEN t.senderAccountId = a.accountId THEN - t.amount ELSE 0
END AS amount,
a.*,
a2.accountId otherAccountId,
a2.userId otherUserId,
a2.name otherName,
a2.isMainAccount otherIsMainAccount,
a2.isActive otherIsActive
FROM
userAccount a
INNER JOIN `transaction` t ON
t.senderAccountId = a.accountId OR t.recipientAccountId = a.accountId
LEFT JOIN `transactionType` tt ON t.transactionTypeId = tt.transactionTypeId
LEFT JOIN userAccount a2 ON (CASE WHEN t.recipientAccountId = a.accountId THEN t.senderAccountId = a2.accountId WHEN t.senderAccountId = a.accountId THEN t.recipientAccountId = a2.accountId ELSE 0
END);
-- Skapade en vy för att visa kontons saldo.
CREATE VIEW userAccountBalanceView AS SELECT
a.*,
IFNULL(SUM(t.amount), 0) balance
FROM
userAccount a
LEFT JOIN userAccountTransactionView t ON
t.accountId = a.accountId
GROUP BY
a.accountId;
-- Lägger till en ny transaktion mellan två konton.
-- Har en transactionType parameter, vilket är en sträng som automatiskt hittar motsvarande transactionTypeId.
INSERT INTO `transaction`(
senderAccountId,
recipientAccountId,
transactionTypeId,
amount,
`date`
)
SELECT
:senderAccountId,
:recipientAccountId,
tt.transactionTypeId,
:amount,
NOW() FROM transactionType tt WHERE tt.name=:transactionType;
--$db->query("INSERT INTO `transaction`(senderAccountId, recipientAccountId, transactionTypeId, amount, `date`)
-- SELECT :senderAccountId, :recipientAccountId, tt.transactionTypeId, :amount, NOW()
-- FROM transactionType tt WHERE tt.name=:transactionType;");
-- Sats för att "ta bort"(låsa) ett bankkonto.
-- Dubbelkollar userId så slipper det göras i PHP, vilket hade kostat ett extra databasanrop.
UPDATE userAccount SET isActive=0 WHERE userId=:userId accountId=:accountId AND isMainAccount=0;