ik ben bezig met een ticket service, hoe kan ik een maximum instellen voor de aantal inserts in de MYSQL database?

Dus bijvoorbeeld bij 1000 verkochte tickets is het uitverkocht en kan men geen tickets meer krijgen.
1) een trigger
2) een tabel waar je ieder kaartje in stopt, en dan een UNIQUE contraint op het de referentie naar de id van het kaartje vanuit de koppel tabel.
Hmm dat begrijp ik niet echt heel goed
Dos bedoelt dat je een "kaartenbak" kunt maken met alle tickets waaruit je steeds 1 ticket verkoopt totdat de bak "leeg" is.

Dat kan ook met één tabel door daarin bijvoorbeeld een kolom "sold" van 0 op 1 te zetten bijvoorbeeld. Met een UPDATE ... WHERE sold = 0 LIMIT 1 kun je dan steeds één kaartje verkopen.

Maar ergens is het omslachtig om het op te lossen via een query en vervolgens een databasefout voor "kan niets meer verkopen". Ik zou zeggen dat het makkelijker is om alleen een INSERT uit te voeren zolang COUNT(*) <= 1000 geldt voor een tabel met verkochte tickets.
2 manieren:

1) Zoals Ward zegt: Tellen hoeveel kaarten er verkocht zijn door een COUNT(*)
2) Een kolom maken met het maximale aantal tickets (1000 bijv.) en dan aftellen.


$query = "UPDATE tabel SET maxkaarten = maxkaarten - 1";

Controleren of die op 0 staat en dan blokkeren. Persoonlijk heeft nummer 1 mijn stem.
Wij weten natuurlijk je hele idee hierachter nu en is afhankelijk van wat je wil.
Dos' idee zou mooi zijn als je verschillende kaarten hebt, die je kunt toevoegen in een tabel, met een waarde 0/1 (Te koop/Verkocht).

Ward's idee is mooi als je standaard altijd een vast aantal de zelfde kaarten wilt verkopen. Tellen hoeveel kaarten je inmiddels in de database hebt, is dit minder dan x, dan een formulier o.i.d. tonen om een kaart te verkopen.
Een tabel voor de tickets (met een kolom voor het max. aantal), en een tabel waarin je de verkochte tickets in opslaat (vergelijk het met orders-products).:

SELECT t.ticket_id,
	t.max_amount - COALESCE(SUM(s.amount), 0) available
FROM
	tickets t
LEFT JOIN
	sold_tickets s
	USING (ticket_id)
GROUP BY t.ticket_id

Reageren