18. september 2011 - 14:14Der er
8 kommentarer og 1 løsning
SQL køres på alle databaser fra tidligere SQL
Jeg skal have lidt hjælp til en JOIN i min MySQL database. Som så mange gange før har jeg løst problemet med kodning i ASP, men det kræver (også som så mange gange før) for meget CPU-kraft og er sikker på det kan løses direkte i en SQL.
Jeg har en database som hedder admin i den er der en tabel som hedder server og i den en kollonne der hedder ref_db
Mit problem er at på alle de databaser der er listet i admin.server.ref_db skal nedenstående SQl køres og der skulle derefter meget gerne ORDER BY antal efterfølgende.
SELECT COUNT(*) AS antal FROM UDTRÆK_FRA_DB1.gal WHERE last_update > ASP_FUNKTION_DER_BEREGNER_DATO
Udeoverovenstående findes der så egentlig en funktion direkte i SQL som kan beregne en dato minus 7 dage?? last_update er af datetime-format.
Okay... Jeg prøver at lade den stå åben et par dage for at se om der kommer nogle løsninger!
//bondester
Synes godt om
Slettet bruger
18. september 2011 - 20:24#5
Du kan godt joine tabeller på tværs af databaser, bare ikke på den måde som du gerne vil have det gjort, fordi dine database navne ligger i en tabel.
To måder at løse det på:
1) Du laver noget kode der først henter database navnene fra din tabel, og bagefter konstruerer en sql query i stil med:
SELECT COUNT(*) AS antal, <database1> AS db FROM <database1>.gal WHERE last_update > SUBDATE(SYSDATE(),7) UNION ALL SELECT COUNT(*) AS antal, <database2> AS db FROM <database2>.gal WHERE last_update > SUBDATE(SYSDATE(),7) UNION ALL osv... ORDER BY antal
hvor du erstatter <database1>, <database2>, med dine database-navne. Denne sql query eksekverer du så i din kode.
2. Du laver en stored procedure der gør det samme, så kan du nøjes med 1 database kald i stedet for 2.
tolamaps <-- Det var meget tæt på at virke... Der skulle lige lidt ' rundt om det første databasenavn så det kommer til at se sådan ud:
SELECT COUNT(*) AS antal, '<database1>' AS db FROM <database1>.gal WHERE last_update > SUBDATE(SYSDATE(),7) UNION ALL SELECT COUNT(*) AS antal, '<database2>' AS db FROM <database2>.gal WHERE last_update > SUBDATE(SYSDATE(),7) UNION ALL osv... ORDER BY antal
Jeg prøver at implementerer løsningen og se hvordan det loader, ellers må jeg tyde til Stored Procedure... Smid et svar og du skal få point, samme til splazz hvis du vil have lidt for SYSDATE()
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.