MySQL effiziente Iteration mit MYSQL

Bazilinho

Mitglied
Hi Leute!
Ich hoffe, Ihr könnte mir bei folgendem Problem helfen..

Ich habe eine MYSQL-Datenbank und hier in einer Tabelle Datensätze, die mit einem Rang versehen sind. Also der billigste Anbieter der Dienstleistung ist auf 1, der nächste auf 2 usw...

Jedoch gibt es hierbei noch 1 Unterscheidungsmerkmal (1 oder 0). Mich interessieren nur die Datensätze, bei denen das Merkmal x=0 ist.

Ich hoffe, Ihr könnt mir soweit folgen.. :oops:

Es kann also sein, dass der billigste Anbieter (mit x=0) im Ranking mal auf 1, aber auch mal auf 3, 4, 5 usw. steht.

Ein Szenario wäre also:

Datensatz x mit Rang 1 wird auf den bereinigten Rang 1 abgebildet,
Datensatz y mit Rang 3 wird auf den bereinigten Rang 2 abgebildet,
Datensatz y mit Rang 5 wird auf den bereinigten Rang 3 abgebildet,
....


Ich habe meiner Tabelle auch schon eine Spalte für dieses "bereinigte" Ranking hinzugefügt.
HIer sind aber noch die Default-Werte (NULL) eingetragen.

ABER: Wie kann ich das bereinigte Ranking jetzt effizient erstellen?? Mit 2 Selects (die ich sonst DEFINITIV bräuchte ) und for-Schleifen, die dann das UPDATE beinhalten aus der JAVA-Applikation heraus erscheint mir doch recht uneffizient..

Sry, aber ich muss mich leider an manchen Stellen etwas schwammig ausdrücken.. Darum glaubt mir bitte einfach, dass ich sonst 2 Selects bräuchte...

Vielen Dank schonmal für Euren Support!!
 
S

SlaterB

Gast
schwammig ausgedrückt, in der Tat,
da du anscheinend nicht von selber schon an einer zweiten Version arbeitest, meine Aufforderung dazu ;)

ein besonders unklarer Punkt
- "Merkmal x=0 ist" .. "Datensatz x"
dass du x mal als Merkmal verwendest, dann aber einer der Datensätze auch mit x bezeichnest, ist ungünstig,

in deinem Beispiel taucht das Merkmal x bzw. sonst irgendwas, was nur 0 oder 1 sein kann, auch nicht auf,
das ist schlecht, so weiß man gar nicht was x nun zu bedeuten hat,
evtl. muss man das Update nur für bestimmte Einträge aus der DB machen, das wäre doch trivial

------

soweit ich es insgesamt verstehe könnte das ganze so lauten:

[sql]
update tabelleA a1 set bRang =
(select count(*) from tabelleA a2
where a1.id != a2.id and sonstige wichtige Bedingungen zur Zuordnung zu a1
and x = 0 and a2.rang < a1.rang) +1
where x = 0
[/sql]
zählen wie viele andere es gibt +1
 

Bazilinho

Mitglied
Ok, Du hast Recht, mit dem X als Merkmal und Datensatz...
Hat wirklich nix miteinander zu tun!!!

Ok, aber Step by Step..
Ja, ich arbeite grade an der JAVA-basierten Version, steht auch kurz vor der Vollendung...

Werde aber auch Deinen SQL-Befehl mal austesten.

Ich versuche nochmal mein Problem zu erläutern..

Meine Spalten in der DB sehen in etwa so aus:


Code:
Merkmal 1 | Postleitzahl | ... | Mermal 2 (0 oder 1) | Rang (komplett) | Rang (mit Merkmal 2 = 0) |
--------------------------------------------------------------------------
.....         |  50222       | ... |              0            |     1                 |      1
.....         |  50222       | ... |              1            |     2                 |      -
.....         |  50222       | ... |              0            |     3                 |      2
.....         |  50222       | ... |              1            |     4                 |      -
.....         |  50222       | ... |              0            |     5                 |      3


....


.....         |  50223       | ... |               0           |     1                 |      1
.....         |  50223       | ... |               1           |     2                 |      2

.....

So sieht es aus.. Den kompletten Ränge pro PLZ und so habe ich.. Ich muss jetzt eben nur die bereinigten Ränge berechnen, anhand der Tatsache das Merkmal 2 = 0 ist..

Ich hoffe, das machts deutlicher.. :rtfm:
 
Zuletzt bearbeitet von einem Moderator:

Evil-Devil

Top Contributor
An sich recht einfach zu lösen.

Jedesmal wenn du das Ranking aktualisieren willst, holst du dir die Datensätze deren Merkmal 0 ist.
Code:
Select * from ranks where merkmal = 0 order by rank

Da du das Ranking neu vergeben willst bietet sich eine Hilfstabelle sehr an in die du die Daten überträgst. Diese sollte eine zusätzliche Spalte mit einer Auto ID für das neue Ranking haben.
Code:
insert into ranks_neu select * from ranks where merkmal = 0 order by rank

Abschließend kannst du deine alte Ranking Tabelle leeren und die Daten der Hilfstabelle in selbige übertragen.

An sich eine ideale Aufgabe für einen Cronjob ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
R Effiziente Java-Methode zum finden eines freien PK Datenbankprogrammierung 7
S Eclipselink Lazy Loading und interne iteration Verständnis Datenbankprogrammierung 1
B SQL queries do not currently support iteration Datenbankprogrammierung 2
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
P MySQL Connection Global Datenbankprogrammierung 13
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
J Dateien in MySQL speichern & indizieren Datenbankprogrammierung 2
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
K MySQL Datenbankbackups Datenbankprogrammierung 5
G MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
kaoZ HyperSQL vs. MYSQL Datenbankprogrammierung 4
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben