Hallo zusammen,
Dieses Problem möchte ich lösen:
Es gibt 5 Bücher zu kaufen. Legt ein Kunde ein Buch in den Warenkorb, soll es für z.B. für 30 Minuten für Ihn reserviert sein.
Es kommen noch 8 weitere Kunden die gleichzeitig das gleiche Buch in den Warenkorb legen und reservieren möchten.
Da es nur 5 Bücher hat, dürfen es nur total 5 reservieren und kaufen können.
Meine Lösung sieht so aus:
Eine Tabelle mit den Büchern, eine für die Reservationen und eine für die Verkauften
Jetzt meine Frage, wie soll ich es Lösen, dass sicher kein Buch zu viel gekauft wird?
Mein Ansatz sieht so aus:
Jedoch funktionier die IF Abfrage nicht Ist dieser Weg korrekt, dass es keine Überbestellungen gibt?
Vom Extremfall, dass 100 Kunden das gleiche Buch haben wollen und in der gleichen Millisekunde auf Kaufen klicken.
Wenn ich die Anzahl verfügbare Bücher mit einem SELECT an PHP gebe, und dann erst den INSERT erstelle. Besteht doch die Gefahr, dass die SELECT COUNT bei zu vielen noch verfügbare Bücher anzeigt?
Hat jemand schon mal so was gemacht? Alle Ideen sind Willkommen!
Dieses Problem möchte ich lösen:
Es gibt 5 Bücher zu kaufen. Legt ein Kunde ein Buch in den Warenkorb, soll es für z.B. für 30 Minuten für Ihn reserviert sein.
Es kommen noch 8 weitere Kunden die gleichzeitig das gleiche Buch in den Warenkorb legen und reservieren möchten.
Da es nur 5 Bücher hat, dürfen es nur total 5 reservieren und kaufen können.
Meine Lösung sieht so aus:
Eine Tabelle mit den Büchern, eine für die Reservationen und eine für die Verkauften
Code:
CREATE TABLE IF NOT EXISTS `bucher` (
`bucher_ID` int(11) NOT NULL,
`Name` varchar(50) NOT NULL,
`Anzahl` int(11) NOT NULL,
KEY `ID` (`bucher_ID`)
);
INSERT INTO `bucher` (`bucher_ID`, `Name`, `Anzahl`) VALUES
(1, 'Buch 1', 5);
CREATE TABLE IF NOT EXISTS `bucher_reservation` (
`bucher_ID` int(11) NOT NULL,
`reservation_end_time` int(11) NOT NULL
);
INSERT INTO `bucher_reservation` (`bucher_ID`, `reservation_end_time`) VALUES
(1, 1366964769);
INSERT INTO `bucher_reservation` (`bucher_ID`, `reservation_end_time`) VALUES
(1, 1366964770);
CREATE TABLE IF NOT EXISTS `bucher_verkauft` (
`bucher_ID` int(11) NOT NULL
);
INSERT INTO `bucher_verkauft` (`bucher_ID`) VALUES
(1),
(1)
Mein Ansatz sieht so aus:
Code:
SET @c = (SELECT
( b.Anzahl -
(SELECT
COUNT(*)
FROM
bucher_reservation br
WHERE
br.bucher_ID = b.bucher_ID
AND
br.reservation_end_time > 1366954769
) -
(SELECT
COUNT(*)
FROM
bucher_verkauft bv
WHERE
bv.bucher_ID = b.bucher_ID
)
) AS Verfugbar_Anzahl_Bucher
FROM
bucher b
WHERE
b.bucher_ID = 1
LIMIT 1);
IF(@c > 0);
INSERT INTO `bucher_reservation` (`bucher_ID`, `reservation_end_time`) VALUES
(1, 1366964771);
Vom Extremfall, dass 100 Kunden das gleiche Buch haben wollen und in der gleichen Millisekunde auf Kaufen klicken.
Wenn ich die Anzahl verfügbare Bücher mit einem SELECT an PHP gebe, und dann erst den INSERT erstelle. Besteht doch die Gefahr, dass die SELECT COUNT bei zu vielen noch verfügbare Bücher anzeigt?
Hat jemand schon mal so was gemacht? Alle Ideen sind Willkommen!
Zuletzt bearbeitet: