FAQ Suchen Synapsis Wiki Projekte Mitgliederliste Benutzergruppen Profil Einloggen, um private Nachrichten zu lesen Registrieren Login

Mysql Join

 
Neues Thema eröffnen   Neue Antwort erstellen    Syncom.org Foren-Übersicht -> Interpretersprachen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
PhP0Kid
Profi-Benutzer


Anmeldedatum: 05.01.2007
Beiträge: 415
Wohnort: Ellwangen (nahe Aalen)
Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)

BeitragVerfasst am: 19.01.2008, 11:49    Titel: Mysql Join Antworten mit Zitat

Hi,

ich habe lange gewartet, bis ich mich entschieden habe hier zu fragen, weil ich eigentlich keinen Einblick in meine Datenbankstruktur geben wollte, aber es hilft langsam nichts mehr. Ich weiß tatsächlich nicht weiter .. Very Happy

Hier erstmal die Tabellen:

Code:
[u]bank_accounts[/u]
bank_account_id
bank_account_owner_id
bank_account_posessed_by_company
bank_account_bank_id
bank_account_bank_account_type_id
bank_account_register_date

[u]bank_account_credits[/u]
bank_account_credit_bank_account_id
bank_account_credit_num
bank_account_credit_date
bank_account_credit_change


So.. es gibt also Bankkonten, die, wenn die UserID stimmt und bank_account_posessed_by_company gleich 0 ist, einer Person gehören. Eine Funktion soll nun ermitteln (die ich später für sajax brauche), wie das Gesamtvermögen des Benutzers aussieht. Über eine Funktion erhält die gesuchte Funktion bereits das Privatvermögen (aus einer anderen Tabelle). Nun sollen noch die Credits auf den Bankkontnen hinzugefügt werden.

Ich brauche also ein MySQL-Statement, das alle Konten aus "bank_accounts" heraussucht und mit der dadurch erhaltenen bank_account_id aus bank_account_credits diejenigen credits herausholt, wo das Datum am aktuellsten (= größten ist).

Bei einem einzigen Konto sehe das so aus:
Code:
SELECT
  `bank_account_credit_num`
FROM
  `bank_account_credits`
WHERE
  `bank_account_credit_bank_account_id` = '1'
ORDER BY
  `bank_account_credit_date`
LIMIT
  1

Da das neueste Datum stets am größten ist und er nur einen Datensatz holen soll, bekommt man genau den aktuellen Stand der Credits. Nun will ich das aber für alle Bankkonten gleichzeitig erledigen und zum Beispiel ein solches Ergebnis erhalten:
Code:
bank_account_id | bank_account_credit_num
1 | 10000
2 | 40345
3 | 66023

Noch besser wäre natürlich sofort die Summe der drei Ergebnisse.

Das Problem ist jetzt nur, dass ich, wenn ich mit JOINS oder sonstwas arbeite, zwar alles herausholen kann, er aber nicht mehr trennen kann, was der aktuellste Stand der Credits ist. Bei einem LIMIT 1 würde er ja schon nach einem ersten Treffer abbrechen, was ich natürlich nicht will.

Fällt jemandem eine Idee ein, wie man per JOINs oder ähnlichem ohne zwei SQLs das Ergebnis erhalten kann?



lG

_________________
http://www.Julian-Stier.de | T-REx 2.2

Fertiges ( 16.7.08 ):
* Julian-Stier.de, Blog - Juli/August 2008

Aktuelles ( 16.7.08 ):
* T-REx 2.3.0 - release 2008/2009
* GlobalIndustry - release 2008/2009
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
PhP0Kid
Profi-Benutzer


Anmeldedatum: 05.01.2007
Beiträge: 415
Wohnort: Ellwangen (nahe Aalen)
Programmiersprachen: PHP, CSS, (X)HTML, SQL, JavaScript, C++ (nach Erfahrung von links nach rechts)

BeitragVerfasst am: 19.01.2008, 12:59    Titel: Antworten mit Zitat

Für alle die ein ähnliches Problem haben, oder die Lösung interessiert: das Problem wurde in einem anderen Forum gelöst:

Code:
SELECT      `bank_account_id`, (
                              SELECT      bank_account_credit_num
                              FROM      gi_bank_account_credits
                              WHERE      bank_account_credit_bank_account_id = bank_account_id
                              ORDER BY   bank_account_credit_date DESC
                              LIMIT      1
                              ) AS bank_account_credit_num
                           FROM      gi_bank_accounts


Es war mit Hilfe eines einfachen Subselects möglich Smile MySQL hat doch noch so seine Hürden, die ich nehmen muss Very Happy


lG

_________________
http://www.Julian-Stier.de | T-REx 2.2

Fertiges ( 16.7.08 ):
* Julian-Stier.de, Blog - Juli/August 2008

Aktuelles ( 16.7.08 ):
* T-REx 2.3.0 - release 2008/2009
* GlobalIndustry - release 2008/2009
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
thorn
Fortgeschrittener Benutzer


Anmeldedatum: 23.09.2007
Beiträge: 53
Wohnort: Niederried b.K. (CH)
Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB

BeitragVerfasst am: 22.01.2008, 00:25    Titel: Antworten mit Zitat

Mit einer JOIN-Abfrage werden alle Daten die zusammenhängen aufgelistet - so gesehen wären mindestens zwei Abfragen von Nöten - eine verschachtelte, wie du sie vorliegen hast, ist wohl die richtige Alternative - wüsste sonst auch gerade nicht, wie man das lösen kann... Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Syncom.org Foren-Übersicht -> Interpretersprachen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Anhänge in diesem Forum nicht anhängen.
Du kannst Dateien in diesem Forum nicht herunterladen.



Powered by php B. B. © 2001, 2005 php B. B. Group
Template xabbBlue für php B. B. Foren - created by php b. b. styles
Modified by synapsis
Protected by CTracker