| 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)
|
Verfasst am: 19.01.2008, 11:49 Titel: Mysql Join |
|
|
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 ..
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 |
|
 |
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)
|
Verfasst am: 19.01.2008, 12:59 Titel: |
|
|
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 MySQL hat doch noch so seine Hürden, die ich nehmen muss
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 |
|
 |
thorn Fortgeschrittener Benutzer

Anmeldedatum: 23.09.2007 Beiträge: 53 Wohnort: Niederried b.K. (CH) Programmiersprachen: PHP, MySQL, (X)HTML, CSS, JS, C, VB
|
Verfasst am: 22.01.2008, 00:25 Titel: |
|
|
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...  |
|
| Nach oben |
|
 |
|
|
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.
|
|