bassebhuMedlem sedan nov. 20016 480 inlägg Hej alla glada!
Jag håller på att bygga ett bokningssystem där det finns en tabell med bokningar, en med bokningsobjekt, en med objekten och en med medlemmar.
När någon bokar ett objekt så skapas en bokning i bokningstabellen och ett bokningsobjekt sparas i bokningsobjektstabellen.
Jag har byggt det så att inga uppgifter dubbelsparas i någon tabell (redundans?). Är det rätt tänkt eller är det mer optimerat att t ex spara med användarnamn till boknigen i stället för att hämta det från medlemstabellen? Sådana val dyker upp rätt ofta, men nu har jag fått till det utan att dubbelspara, men å andra sidan fått lite längre sql-frågor och joins.
För varje objekt i objektstabellen så finns ett fält för hur många av det valda objektet som finns att bokas, samt ett fält som talar om hur många av det objektet som är bokade. Nu har jag löst det så att varje gång en bokning går igenom så plussas det antalet och varje gång något lämnas tillbaka så subtraheras det värdet. Det har blivit en hel del trixande för att få till det, men det funkar hyfsat nu. Frågan är hur man brukar göra.
Tänker jag rätt eller finns det någon mer optimerad lösning där den räknar ut hur många objekt som är utlånade samtidigt som den loopar ut vilka objekt som finns att bokas?
Hur ska man i så fall summera samtliga antal som är bokade från bokningstabellen och sedan sammanföra detta på objektslistan? Det verkar vara loop-i-loop-varning på en sådan lösning och sådana lösningar rimmar inte med optimering.
Tackar för hjälp! :)
tohaMedlem sedan dec. 1999707 inlägg Tycker du inte ska subtrahera och addera som du förklarade. Antalet som finns att boka gäller väl för en viss tidpunkt. Nästa lördag finns det X st att boka ex.
Gör hellre en select som summerar antalet bokade objekt inom en viss tidsram och subtrahera det med antalet objekt det finns.
SELECT Count(*) FROM Bokning WHERE ( Bokning.StartDatum BETWEEN @startDatum AND @slutDatum ) OR ( Bokning.SlutDatum BETWEEN @startDatum AND @slutDatum )
bassebhuMedlem sedan nov. 20016 480 inlägg Tiden har ingen betydelse. Problemet är att en count bara räknar hur många olika objekt som är bokade, inte hur många av varje objekt som är bokade. I tabellen finns ett fält som heter antal. Kan man med en count-sats räkna ut hur många rader det finns av det objektet SAMT hur många det finns totalt med hjälp av antal-fältet eller är enda lösningen att sätta en while-loop och plussa på för varje rad?
Nån kanske förstår vad jag försöker beskriva hehe :)
Tack för svar!
bassebhuMedlem sedan nov. 20016 480 inlägg Jag har löst det nu, men jag vet inte om det känns så snyggt. Blev loop-i-loop :)
$bookedItems = 0;
$bSql2 = "SELECT bi_amount FROM b_bookingitems INNER JOIN b_bookings ON b_id = bi_bookingid WHERE bi_itemid = " . $bRow['i_id'] . " AND b_status = 1 AND NOT (b_visibility = 2) AND NOT (bi_visibility = 2)";
$bResult2 = mysql_query($bSql2);
while($bRow2 = mysql_fetch_array($bResult2)) {
$bookedItems = $bookedItems + $bRow2['bi_amount'];
}
$avItems = $bRow['i_amount'] - $bookedItems;
echo $avItems . ' / ' . $bRow['i_amount'];