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.
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.
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