Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 :rolleyes:

Gruß

Ganymed

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

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.

  • Autor

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? :)

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.