Table abrufen(View) / berechnen / abgleichen

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Table abrufen(View) / berechnen / abgleichen

    Guten Tag und Frohe Ostern :)

    Nun mal zu meinem "Problem"...

    Ich rufe aus einmel View Daten ab, berechne sie lokal und update dann das berechnete Feld.
    Testweise mit 4000 Datensätzen, die dauer der ganzen Prozedur dauert zwischen 2,8 - 6 Sekunden.
    Wobei der Updatebefehl am längsten dauert von allem, abrufen und berechnen dauert ca 0,5-0,8 sek und die restliche Zeit wird für den Updatebefehl verbraucht.

    Hier mal der Code den ich dafür verwende :D
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim cb As MySqlCommandBuilder
    2. Dim data As DataTable
    3. Dim da As MySqlDataAdapter
    4. da = New MySqlDataAdapter("SELECT * FROM vdata_ressource_calc;", sqlcon.dbConnection)
    5. cb = New MySqlCommandBuilder(da)
    6. da.Fill(data)
    7. myTrans = sqlcon.dbConnection.BeginTransaction()
    8. myCommand.Transaction = myTrans
    9. For Each row As DataRow In data.Rows
    10. Dim Ressource As Int64
    11. item_index += 1
    12. Ressource = Convert.ToInt64(row("ressources")) + x
    13. sb.AppendLine(String.Format("UPDATE `worlds` SET `ressources`='{0}' WHERE `world_id`='{1}';", Ressource, row("world_id")))
    14. myCommand.CommandText = sb.ToString
    15. Next
    16. myCommand.ExecuteNonQuery()




    Achso und hier nochmal die View
    Spoiler anzeigen

    SQL-Abfrage

    1. SELECT
    2. `user_buildings`.`world_id` AS `world_id`,
    3. `user_buildings`.`buildid` AS `buildid`,
    4. `user_buildings`.`buildlevel` AS `buildlevel`,
    5. `user_buildings`.`producer_type` AS `producer_type`,
    6. `user_buildings`.`producer_power` AS `producer_power`,
    7. `data_build`.`res_produce` AS `res_produce`,
    8. `worlds`.`ressources` AS `ressources`
    9. FROM
    10. (
    11. `worlds`
    12. LEFT JOIN ( `data_build` JOIN `user_buildings` ON ( ( `user_buildings`.`buildid` = `data_build`.`build_id` ) ) ) ON ( ( `user_buildings`.`world_id` = `worlds`.`world_id` ) )
    13. )
    14. ORDER BY
    15. `user_buildings`.`world_id`

    Wie man sieht, greift die View auf 3 Tabellen zu, um sich Parameter für die Berechnung zu holen.



    Also was meint Ihr denn so, was man dort noch verbessern könnte weil es jetzt immerhin nur 4000 Datensätze sind und schon ne Zeit braucht...


    Lieben Gruß und schonmal vielen Dank :)
    Marvin
    Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)
    mir sieht dein Code so aus, als ob du in bestimmten world-Datensätzen das ressources-feld um x erhöhen möchtest.
    Das müsste sich eiglich direkt in Sql formulieren lassen, mit einem SubSelect - iwie was wie

    SQL-Abfrage

    1. Update world set `ressources`=`ressources` + 7 where world.world_id in Select world_id From `vdata_ressource_calc`;
    oder sowas.
    (ich bin nicht so der sql-crack)
    Guck halt deine Sql-Doku nach.