Record tussenvoegen in database indien mogelijk.
zoals gezegd is jouw scriptje zeer bruikbaar en zal ik het ook gaan gebruiken.
Wilde met mijn opmerkingen alleen nog even wat leren van een expert.
Hartelijk dank voor je tips.
mvg
Ik bedoel het ook helemaal niet verkeerd, maar hoewel het nu veel logischer voor je lijkt om bijvoorbeeld de tijden en datums los op te slaan gaat dat je steeds meer tegenwerken.
Ik heb 'vroeger' diezelfde "denkfouten" gemaakt. Maar de opslag in de database is heel anders dan hoe je het uiteindelijk op je webpagina wel weergeven.
Succes verder met je site!
Andre Janssen op 22/08/2014 16:52:41:
3: De datum staat in een apart veld. Maar dat is niet zo'n probleem denk ik.
Immers in Ramon's scriptje kan ik de betreffende datum toch gewoon in $aanvang en $einde vooraan toevoegen?
Immers in Ramon's scriptje kan ik de betreffende datum toch gewoon in $aanvang en $einde vooraan toevoegen?
Dan ga je het jezelf dus moeilijk maken. Prima, jouw keuze.
Andre Janssen op 22/08/2014 16:52:41:
4: Het feit dat de te plaatsen periode niet past binnen een van de reeds aanwezigen wil niet zeggen dat die daarbuiten dus wél past.
Het gaat er niet om om een vrije range te vinden maar om exact op dezelfde (vrije?) range te kunnen plaatsen.
Het gaat er niet om om een vrije range te vinden maar om exact op dezelfde (vrije?) range te kunnen plaatsen.
Begrijp ik nog steeds niet. Als van de in te voeren gegevens de datum, de begintijd en de eindtijd niet vallen in een reeds bestaand tijdvak, dan is toch automatisch de gevraagde tijd beschikbaar!?
Als die gedachtegang volgens jou niet goed is, werkt het script van Ramon niet goed.
Andre Janssen op 22/08/2014 16:52:41:
5: Feit is volgens mij wel dat jij de hele database afzoekt, terwijl ik alleen de records van een bepaalde datum check hetgeen natuurlijk sneller gaat, lijkt me.
Ik kijk toch alleen maar in de records van eenzelfde datum, in dit geval twee op '2014-08-22'.
Immers mijn query sorteert de records op datum en daarabinnen op tijd.
Ik kijk toch alleen maar in de records van eenzelfde datum, in dit geval twee op '2014-08-22'.
Immers mijn query sorteert de records op datum en daarabinnen op tijd.
Maar om de records te kunnen sorteren moet toch de gehele database worden doorlopen?!
Andre Janssen op 22/08/2014 16:52:41:
Natuurlijk wordt een record ge-INSERT maar ik kan ze daarna SORTeren waarop ik wil, in dit geval op datum en daarbinnen op tijd. Daarna kan het in het resultaat van de query het ingevoerde record ahw 'ertussen' staan op dezelfde datum en een andere tijdrange. Het is maar hoe je het bekijkt denk ik.
Sorteren is een handeling die je uitvoert op de database als je gegevens wilt opvragen. De gegevens worden daardoor in de database niet anders geplaatst, hooguit getoond.
Ga maar eens werken met een id met AUTO_INCREMENT. Laatst toegevoegde id zal (normaal gesproken) de hoogste waarde hebben. Of je daarbij sorteert op datum, tijd of wat dan ook; de nummering zal er niet door worden gewijzigd.
Tot slot, verder is het wel zo netjes om even te melden als je een vraag ook op een ander forum stelt: crossposting (http://www.pfz.nl/forum/topic/10839-record-tussenvoegen/). Dit om te voorkomen dat we antwoorden geven op een vraag die misschien al beantwoord is, of antwoorden geven die al gegeven zijn. Of misschien dat er in een ander topic meer info staat dan hier. Zoals blijkt uit de reactie van Ivo P.
Als je dan toch op meerdere plaatsen je vraag stelt, zorg dan ook dat al die plekken alle informatie hebben, zodat jij (goed) geholpen kunt worden. Straks proberen ze je bij PFZ nog te helpen, terwijl jij al je antwoord hebt. Vind dat best onbeleefd; mensen helpen je op vrijwillige basis!
Gewijzigd op 22/08/2014 22:03:21 door Obelix Idefix
Dit is absoluut niet mijn bedoeling, integendeel: ik heb in elk geval weer wat van jullie geleerd.
Dan toch nog maar eens terug naar mijn vraag, waarvan ik dacht dat die heel eenvoudig was, alleen wist ik de oplossing niet te bedenken.
Het is mijn gewoonte om aan te geven dat mijn vraag is beantwoord als die is beantwoord. Ik neem aan dat ik dan hier een reactie moet plaatsen waarin ik dat aangeef, zodat eea kan worden afgesloten? Zal daar beter op letten. Voorlopig heb ik nog steeds hetzelfde probleem zoals oorspronkelijk beschreven.
3: De datum staat in een apart veld. Maar dat is niet zo'n probleem denk ik.
Immers in Ramon's scriptje kan ik de betreffende datum toch gewoon in $aanvang en $einde vooraan toevoegen?
Dan ga je het jezelf dus moeilijk maken. Prima, jouw keuze.
*** Ik weet niet wat hier moeilijker aan is, want ik plak gewoon doe datum ervoor.
4: Het feit dat de te plaatsen periode niet past binnen een van de reeds aanwezigen wil niet zeggen dat die daarbuiten dus wél past. Het gaat er niet om om een vrije range te vinden maar om exact op dezelfde (vrije?) range te kunnen plaatsen.
Begrijp ik nog steeds niet. Als van de in te voeren gegevens de datum, de begintijd en de eindtijd niet vallen in een reeds bestaand tijdvak, dan is toch automatisch de gevraagde tijd beschikbaar!?
Als die gedachtegang volgens jou niet goed is, werkt het script van Ramon niet goed.
*** Als bijv van de in te voeren gegevens de begintijd bijv VOOR de begintijd van het reeds bestaande tijdvak ligt en de eindtijd ERACHTER, past het dus niet maar ligt er 'overheen'. Toch vallen beide niet in het bestaande tijdvak, toch?
5: Feit is volgens mij wel dat jij de hele database afzoekt, terwijl ik alleen de records van een bepaalde datum check hetgeen natuurlijk sneller gaat, lijkt me.
Ik kijk toch alleen maar in de records van eenzelfde datum, in dit geval twee op '2014-08-22'.
Immers mijn query sorteert de records op datum en daarbinnen op tijd.
Maar om de records te kunnen sorteren moet toch de gehele database worden doorlopen?!
*** Heb je helemaal gelijk in, maar daarna staan in het resultaat van de query (met SORT/ORDER) alleen nog de gewenste records waar gecheckt wordt of er iets 'tussengevoegd' kan worden.
Natuurlijk wordt een record ge-INSERT maar ik kan ze daarna SORTeren waarop ik wil, in dit geval op datum en daarbinnen op tijd. Daarna kan het in het resultaat van de query het ingevoerde record ahw 'ertussen' staan op dezelfde datum en een andere tijdrange. Het is maar hoe je het bekijkt denk ik.
Sorteren is een handeling die je uitvoert op de database als je gegevens wilt opvragen. De gegevens worden daardoor in de database niet anders geplaatst, hooguit getoond.
Ga maar eens werken met een id met AUTO_INCREMENT. Laatst toegevoegde id zal (normaal gesproken) de hoogste waarde hebben. Of je daarbij sorteert op datum, tijd of wat dan ook; de nummering zal er niet door worden gewijzigd.
*** Heb je helemaal gelijk in, maar in het resultaat van de query (string) kan wel alleen het gewenste staan (zie hierboven).
Tot slot, verder is het wel zo netjes om even te melden als je een vraag ook op een ander forum stelt: crossposting (http://www.pfz.nl/forum/topic/10839-record-tussenvoegen/). Dit om te voorkomen dat we antwoorden geven op een vraag die misschien al beantwoord is, of antwoorden geven die al gegeven zijn. Of misschien dat er in een ander topic meer info staat dan hier. Zoals blijkt uit de reactie van Ivo P.
Als je dan toch op meerdere plaatsen je vraag stelt, zorg dan ook dat al die plekken alle informatie hebben, zodat jij (goed) geholpen kunt worden. Straks proberen ze je bij PFZ nog te helpen, terwijl jij al je antwoord hebt. Vind dat best onbeleefd; mensen helpen je op vrijwillige basis!
*** Het is mijn gewoonte om aan te geven dat mijn vraag is beantwoord als die is beantwoord. Ik neem aan dat ik dan hier een reactie moet plaatsen waarin ik dat aangeef, zodat eea kan worden afgesloten? Zal daar beter op letten.
Op meer dan een plaats dezelfde vraag stellen levert juist een 'breder' antwoord op en ik vind daar ook niets op tegen. Er is niet zoiets als 'één' antwoord. Meerdere antwoorden geven juist meer inzicht. Ik neem aan dat jij ook wel eens meerdere offertes opvraagt voor je iets koopt?
Verder heb ik veel waardering voor jullie hulp, maar nogmaals: deze vorm van communcatie kan tot irritatie/misverstand leiden hetgeen niet mijn bedoeling is.
Ik begrijp ook wel dat ik (als beginner!) wellicht niet de meest oprtimale database in elkaar heb gezet, maar ja die is nu eenmaal zo. En mijn vraag is: kan ik desondanks mijn programmeerprobleem oplossen? En natuurlijk kan dat in de bestaande omstandigheden, alleen vraag ik: HOE?
Een andere inrichting van de database is dan wellicht een goed idee, maar een uitdaging is het om ondanks de misschien 'krakkemikkige' database toch een oplossing te hebben en die is er zeer zeker alleen kan ik die nog even niet bedenken.
mvg
Code (sql)
1
2
3
4
2
3
4
SELECT 1 FROM jouwtabel
WHERE datum = '2014-08-23'
AND start_time < '13:00'
AND end_time > '12:00'
WHERE datum = '2014-08-23'
AND start_time < '13:00'
AND end_time > '12:00'
In php voer je voor deze query uit, en controleer je of er rijen uit terugkomen.
Zoja dan is het bezet, anders is het vrij.
Voorwaarde is wel dat het datatype van de tijdvelden TIME is (je kan dat vrij eenvoudig aanpassen)
Maar zijn die blokken nu fixed, of kan van 10:00-14:00 ook voorkomen?
Andre Janssen op 23/08/2014 12:13:24:
Op meer dan een plaats dezelfde vraag stellen levert juist een 'breder' antwoord op en ik vind daar ook niets op tegen.
Eens, daar is niets mis mee. Maar meld het even. Zoals aangegeven proberen nu op meerdere fora mensen jou te helpen. Dan lijkt het me netjes om dat ook even te laten weten, zodat die mensen niet zinloos bezig zijn met het geven van een antwoord (omdat een antwoord al gegeven blijkt of achterhaald omdat er andere/meer info is).
Andre Janssen op 23/08/2014 12:13:24:
Ik begrijp ook wel dat ik (als beginner!) wellicht niet de meest oprtimale database in elkaar heb gezet, maar ja die is nu eenmaal zo. En mijn vraag is: kan ik desondanks mijn programmeerprobleem oplossen? En natuurlijk kan dat in de bestaande omstandigheden, alleen vraag ik: HOE?
Een andere inrichting van de database is dan wellicht een goed idee, maar een uitdaging is het om ondanks de misschien 'krakkemikkige' database toch een oplossing te hebben en die is er zeer zeker alleen kan ik die nog even niet bedenken.
Een andere inrichting van de database is dan wellicht een goed idee, maar een uitdaging is het om ondanks de misschien 'krakkemikkige' database toch een oplossing te hebben en die is er zeer zeker alleen kan ik die nog even niet bedenken.
Bijna alles kan. Er worden hier (en op andere fora) alleen tips gegeven om het anders/beter/makkelijker te doen. Jij wilt echter vasthouden aan jouw, zoals je zelf noemt, 'krakkemikkige' database. Daarmee maak je het jezelf moeilijk en anderen; waarom omslachtig doen als het ook (veel) makkelijker kan? Wat is er op tegen om de databasestructuur aan te passen?
Jij kiest er kennelijk liever voor om met allerlei complexe constructies iets neer te zetten, wat daardoor meer kans geeft op fouten / problemen (in de toekomst) dan nu tijd te steken in een goede oplossing.
Gewijzigd op 23/08/2014 16:31:52 door Obelix Idefix
Jouw oplossing (zie reactie: 23/08/2014 14:39:11) is DE OPLOSSING!! Simpel en precies wat ik nodig had.
Dat ook ik daar nou niet zelf eerder aan heb gedacht.
Het enige, zoals je zelf ook al aangaf, wat ik in de database heb aangepast is de twee tijdvelden als 'TIME' gedefinieerd (ipv tekst).
Hartstikke bedankt!
Het is hetzelfde principe als de oplossing die Ramon eerder heeft gegeven, ik heb alleen de datum apart gecontroleerd en de BETWEEN veranderd in > en <
Hartelijk dank allemaal.
11:00 - 12:30
12:30 - 14:00
15:30 - 17:00
Als je dan met BETWEEN zo controleren voor de periode van 14:00 - 1530, zou deze niet vrij zijn:
Voor een periode van 15:00 - 17:30 zou de laatste in het rijtje geselecteerd moeten worden, maar dat is niet:
Code (php)
1
2
2
SELECT '15:00' BETWEEN '15:30' AND '17:00' OR '17:30' BETWEEN '15:30' AND '17:00'
-> 0 (false)
-> 0 (false)
Gewijzigd op 25/08/2014 19:32:28 door Ger van Steenderen