php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Scripts > BRAINSTORMING PHP/SQL/HTML/JS/CSS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


BRAINSTORMING PHP/SQL/HTML/JS/CSS Ihr habt eine Idee, aber keinen genauen Ansatz? Diskutiert mit anderen Usern des Forums über eure Gedankengänge um evtl. hilfreiche Ideen zu bekommen!
Normale Fragen bitte weiterhin in die entsprechenden Foren!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-03-2010, 18:10
syntaxerror
 Registrierter Benutzer
Links : Onlinestatus : syntaxerror ist offline
Registriert seit: Mar 2010
Beiträge: 31
syntaxerror befindet sich auf einem aufstrebenden Ast
Standard Raum-/Bettenbelegung über Bitmaske - für große Dimensionen

Ein Brainstorming-Forum, sehr schöne Idee

Ich steh auch mal wieder vor dem Problem, dass PHP nur bis 32-Bit rechnen kann.
Das klingt soooo viel, isses aber bei einer riesigen Anzahl beliebig kombinierbarer Räume oder Plätze überhaupt nicht. Da arbeitet man sinnvollerweise mit Bitmasken.Die Binärzahl

Code:
1000 0000 0000 0000 0000 0000 0000 0011
bedeutet natürlich, dass Raum Nr. 32, Raum Nr. 2 und Raum Nr. 1 belegt sind.
Die 1 links bedeutet in (dezimaler) Wirklichkeit den stolzen Wert von 2 hoch 31, was wohl begreifen lässt dass hier selbst 128 Bit gar nix besonderes und im Nu erreicht sind!

Ein schönes Beispiel wäre die Drei ???-Folge "Die gefährliche Erbschaft" (17), in der der Ozeandampfer "Queen of South" [QoS] 500 Betten hatte!

Man stelle sich vor, hier für eine Management-Software eine Bitmaske aufstellen zu müssen die ALLE Kombinationen erschlägt, welche Passagierbetten z. Z. frei und welche belegt sind! 2 hoch 499 ist der Höchstwert! Da kommt doch Freude auf...
Jetzt angenommen, die GMP-Extension gäbe es (noch) nicht, oder das soll auf einen bestehenden PHP4-Kundenserver, bei dem der Kunde nicht unbedingt begeistert wäre, wenn ich an seinem Server herumfummle...

Dann ist das gar nicht so simpel, wenn man mit Checkboxen arbeitet, bei denen man sich bei Wertübergabe auf *EINEN* Wert pro Box beschränken muss.

Ich hab mir das so gedacht:

Ich splitte das Ganze zunächst in Gruppen auf.

Also im QoS-Beispiel mit etwas weniger Betten (100):

Oberdeck (24 B. [0..23] ; Gruppe 0, 24bit, voll)

Poopdeck (18 B. [0..19]; Gruppe 1, 24bit, 6bit ungenutzt)

Backdeck (16 B. [0..15]; Gruppe 2, 16bit, voll)

Hauptdeck (30 B. [0..29]; Gruppe 3, 32bit, 2bit ungenutzt)

Unterdeck (22 B. [0..21]; Gruppe 4, 24bit, 2bit ungenutzt)

Durch diese Struktur wird die Bitmaske allein nun sinnlos, und sie muss immer mit einem sog. Gruppenschlüssel in Kombination stehen.
Z. B. der Hex-Wert $0800 (binär 0000100000000000) kann sowohl das Bett Nr. 11 im Oberdeck als auch das im Backdeck bezeichnen!
Das Ganze ist auch deswegen absolut notwendig, weil es möglich sein muss, gleichzeitig Klicks in verschiedene Decks zu machen, und damit auch mit einer Datenbankabfrage den Status bei allen "berührten" Decks abzufragen!
Angenommen, die Decks sind untereinander aufgeteilt in Kompetenzbereiche. Dann macht der Schiffsangestellte A das Haupt- und Unterdeck, und der Schiffsangestellte B die anderen 3 Decks! Natürlich soll es auch möglich sein, dass die Kompetenzbereiche getrennt bleiben; d. h. dass der eine nicht im Bereich des anderen herumpfuschen können soll!


Wie sieht so eine Checkboxen-Gruppe bei HTML aus? Bekanntlich doch so:

Code:
<input type="checkbox" name="belegung[]" value="4711">
<input type="checkbox" name="belegung[]" value="4712">
Aha. Also wir haben *EINEN* Wert, benötigen aber Bitmaske UND Gruppenschlüssel.
Was definitiv geht ist etwas Mathematik:

Code:
<input type="checkbox" name="belegung[]" value="201">
<input type="checkbox" name="belegung[]" value="201">
D. h. ich errechne mir bei angeklickter Checkbox nachher im Script den Gruppenschlüssel bei ganzzahliger Division durch 100:

groupkey_int = value_int / 100;

Und mit "value & 1" kann ich sogar bei einer Dezimalzahl (!) ggf. prüfen, ob der 1er aktiv ist.
(Simples Draufaddieren - und hinterher Subtrahieren - geht hier IMHO *nicht*: ein Wert von "3" könnte heißen "3 + 0", also Gruppe 3 - inaktiv, oder "2 + 1" Gruppe 2 - aktiv! Zu mehrdeutig!)

Gibt es noch mehr Vorschläge?

Geändert von syntaxerror (25-03-2010 um 18:19 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 25-03-2010, 18:18
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Warum überhaupt Bitmasken? Wenn sich die Anzahl der Plätze/Betten/Wasweißich irgendwann mal ändert, musst du alles neu schreiben. Warum nicht einfach eine Boolean-Spalte in der Tabelle `platz` (oder `bett`) oder eine n:m-Tabelle, die gleich noch abbildet, welcher Platz für wen belegt/reserviert ist.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 25-03-2010, 18:46
syntaxerror
 Registrierter Benutzer
Links : Onlinestatus : syntaxerror ist offline
Registriert seit: Mar 2010
Beiträge: 31
syntaxerror befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Warum überhaupt Bitmasken? Wenn sich die Anzahl der Plätze/Betten/Wasweißich irgendwann mal ändert, musst du alles neu schreiben.
Hehe.
So wie ich's in diesem konkreten Beispiel beschrieben hab, hast du schon recht.
Allerdings wenn man sich hingegen da eine Raumbelegung hineindenkt, und dann z. B. sich verschiedene User immer wieder verschiedene i. d. R. gleichbleibende Gruppen Räume anzeigen lassen wollen (eben per solcher Checkbox-Filter) sieht die Sache u. U. wieder anders aus. Dann könnte man für jeden der User ganz praktisch so eine Maske abspeichern und dann ggf. wieder reinladen.

In dem Fall müsste ich dann nur simple Hex-Werte abspeichern, das ist dann sehr platzsparend.
Bei der Boolean-Lösung müsste ich das für jeden User explizit machen (weil individuell)...da bin ich noch am Überlegen, ob das nicht u. U. zuviel Datensätze verbrät...
Mit Zitat antworten
  #4 (permalink)  
Alt 25-03-2010, 18:52
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Eine vernünftig indizierte und normalisierte Datenbank kommt problemlos mit einer riesigen Menge an Datensätzen aus. Ich persönlich würde sowas jedenfalls niemals über Bitmasken machen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 25-03-2010, 20:04
Quetschi
 PHP Expert
Links : Onlinestatus : Quetschi ist offline
Registriert seit: Dec 2004
Beiträge: 3.134
Quetschi wird schon bald berühmt werden
Standard

@syntaxerror
Ich nutze ab und an solche Bitmasken um true/false-Werte abzuspeichern und zwar mit dem mySql-Datentyp SET - das ist im Prinzip nichts anderes als deine Bitmaske und du kannst jedem Bit praktisch einen Namen verpassen und kannst mittels FIND_IN_SET bequem danach suchen.

Bei der Verwendung dieses Datentyp ist aber zu beachten, dass es diesen soweit ich weiß in keinem anderen SQL-Dialekt gibt - wenn du damit mal auf ein anderes DBMS willst, hast du es etwas unbequemer.

Für deinen geschilderten Anwendungsfall ist aber unbedingt auf anderem Wege vorzugehen - du musst ja bei Belegungen auch noch das Datum berücksichtigen - wie willst du das mit einer Bitmaske vernünftig lösen?
__________________
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Mit Zitat antworten
  #6 (permalink)  
Alt 26-03-2010, 14:16
syntaxerror
 Registrierter Benutzer
Links : Onlinestatus : syntaxerror ist offline
Registriert seit: Mar 2010
Beiträge: 31
syntaxerror befindet sich auf einem aufstrebenden Ast
Standard

Zugegeben ans Datum und wie das da reinkommt hab ich in dieser "Frühphase" noch nicht gedacht...
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:05 Uhr.