Ganymed Geschrieben 3. Mai 2004 Geschrieben 3. Mai 2004 Hallo zusammen, ich habe hier folgende Problemstellung. In meiner Datenbank habe ich, sagen wir mal, 4 Werte (können unterschiedlich viel sein), die entweder 0 oder 1 sein können: R1 R2 R3 R4 1 1 1 1 1 1 0 0 1 1 0 1 Jetzt muss ich herausfinden, welches der kleinste gemeinsame Nenner von denen ist: in meinem Fall also 1 1 0 0, oder? Die Anzahl der Datensätze kann natürlich auch varrieren. Frage: Wie bewerkstellige ich das? Unter google hab ich immer nur kleinstes gemeinsames Vielfaches oder Teiler gefunden Gruß Ganymed Zitieren
Klotzkopp Geschrieben 3. Mai 2004 Geschrieben 3. Mai 2004 Du willst also für die Werte, die bei allen Datensätzen 1 sind, 1 haben, ansonsten 0? Das ist grundsätzlich eine Und-Verknüpfung. Du könntest auch aufsummieren. Wenn die Summe gleich der Anzahl der Datensätze ist, hast du eine 1, sonst eine 0. Zitieren
Ganymed Geschrieben 4. Mai 2004 Autor Geschrieben 4. Mai 2004 Du willst also für die Werte, die bei allen Datensätzen 1 sind, 1 haben, ansonsten 0? Das ist grundsätzlich eine Und-Verknüpfung. Du könntest auch aufsummieren. Wenn die Summe gleich der Anzahl der Datensätze ist, hast du eine 1, sonst eine 0. Hmm... also die Reihe, die du meinst, ist die Senkrechte... Ich müsste aber die Waagerechte ermitteln. Und da geht das mit der Summe doch einfach nicht, oder irre ich mich da? Da wäre ja, wie oben schon gesagt der kleinste gemeinsame Nenner aller Reihen die 1 1 0 0, weil alle Dokumente zumindest bei den ersten beiden Werten eine 1 haben... Zitieren
Klotzkopp Geschrieben 4. Mai 2004 Geschrieben 4. Mai 2004 Du solltest dich von dem Begriff "Nenner" lösen, denn mit Arithmetik hat das nichts zu tun. Hmm... also die Reihe, die du meinst, ist die Senkrechte... Ich müsste aber die Waagerechte ermitteln. Und da geht das mit der Summe doch einfach nicht, oder irre ich mich da? Das ist nur eine Frage der Vorgehensweise. Ob du zuerst Zeilen (=Datensätze) verarbeitest, oder erst die einzelnen Felder (=Spalten) für alle Datensätze, kommt aufs gleiche raus. Letzteres ist IMHO erheblich einfacher, darum hatte ich das vorgeschlagen. Wenn du die Summe über die einzelnen Felder bildest, bekommst du 3 3 1 2. Jetzt musst du nur noch überall dort, wo eine Zahl = Anzahl der Datensätze (3) steht, eine 1 hinmachen, und an den anderen Stellen eine 0: 1 1 0 0 Wenn du es unbedingt zeilenweise verarbeiten willst, könntest du die Werte als Bits anordnen (mit Zweierpotenzen multiplizieren) und addieren: 1 * 8 + 1 * 4 + 1 * 2 + 1 * 1 = 15 1 * 8 + 1 * 4 + 0 * 2 + 0 * 1 = 12 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1 = 13[/CODE] Diese Werte verknüpfst du dann bitweise-und: 15 & 12 & 13 = 12 Die Darstellung des Ergebisses im Dualsystem ist dann das, was du suchst: 12 (dez) = 1100 (dual). Hier musst du aber auf führende Nullen aufpassen. Außerdem kann die Anzahl der Felder je nach Plattform und Sprache begrenzt sein. Zitieren
Ganymed Geschrieben 4. Mai 2004 Autor Geschrieben 4. Mai 2004 Diese Werte verknüpfst du dann bitweise-und: 15 & 12 & 13 = 12 Die Darstellung des Ergebisses im Dualsystem ist dann das, was du suchst: 12 (dez) = 1100 (dual). Hey! Das klingt gut *freu* Kannst du mir das mit dem bitweise Verknüpfen noch einmal erklären? Zitieren
Klotzkopp Geschrieben 4. Mai 2004 Geschrieben 4. Mai 2004 Jeden deiner Datensätze (Zeilen) kann man als Dualzahl interpretieren, wobei jedes Feld eine Dualziffer (= 1 Bit) darstellt. Mehrere dieser Zahlen kann man miteinander verknüpfen, und zwar jeweils die zusammengehörigen Bits: 15: 1 1 1 1 12: 1 1 0 0 ----------- &: 1 1 0 0[/CODE] Bei der und-Verknüpfung ist ein Bit im Ergebnis nur dann 1, wenn das gleiche Bit bei allen Eingangswerten 1 ist. Sobald auch nur eines 0 ist, ist das Ergebnis 0. Einige Programmiersprachen haben Operatoren oder Funktionen für die bitweise Und-Verknüpfung fest eingebaut. Ich bin aber immer noch der Meinung, dass es mit der Summe viel einfacher geht... Zitieren
Klotzkopp Geschrieben 4. Mai 2004 Geschrieben 4. Mai 2004 Um es nochmal etwas deutlicher zu formulieren: Wenn die Daten wirlich so in einer Datenbank liegen, dann brauchst du genau 1 SQL-Statement, um die Feldsummen und die Anzahl der Datensätze zu ermitteln, und musst dann nur noch ein paar Zahlen ersetzen. Wenn du das zeilenweise machen willst, musst du dir jeden Datensatz ansehen, alle Werte einzeln mit Zweierpotenzen multiplizieren und aufaddieren, die Werte aller Datensätze und-verküpfen und am Ende die Bits aus dem Ergebnis wieder rausholen. Je nach Programmiersprache ist das mehr oder weniger kompliziert, aber es ist auf jeden Fall erheblich aufwändiger als der erste Ansatz. Zitieren
Ganymed Geschrieben 4. Mai 2004 Autor Geschrieben 4. Mai 2004 Ich denke, das ist aber schonmal ein prima Ansatz für mein Problem Danke schön Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.