06. oktober 2018 - 21:20 Der er 8 kommentarer

Flere operationer på samme base...

HEJ,
ImySQLi har jeg en tabel (UGETABEL), som indeholder data for uge 39. 40, 41, 42 , 43 .

Nu skriver vi uge 42 og har derfor ikke brug for dat fra uge 39 (uge 40 skal først slettes når uge 43 bliver aktiv, som uge 40 slettes ved aktivering af uge 44.)

Jeg tænker på om det er muligt at:

PSEUDO-kode:


Åbne base;
hent alle records hvor UGE >= 39,
hvis antal records ikke lig 0 da

      slet alle records hvor uge >= 39;
      hvis result = ok
      {
          det gik !
      }
    else
    {
        det gik ikke!
    }
}

hent data for uge 40 og præsenter dem....

Som implementeres sådan:
Først åbne i php:

<?php

$servername = "localhost";
$username = "username";
$password = "password";

// Create connection

$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

echo "Connected successfully";

//    Derefter check antal records hvor uge er mindre eller lig 39.

$sql="SELECT * FROM DATABASE WHERE UGE >= 39"

if ($result=mysqli_query($con,$sql))
  {
        $rowcount = mysqli_num_rows($result);
        if ($rowcount != 0)  // rowcount er ikke 0   
        {
        // sql to delete a record
            $sql = "DELETE FROM MyGuests WHERE UGE >= 39";
            if ($conn->query($sql) === TRUE) {
                echo "Record deleted successfully";
            } else
            {       
                echo "Error deleting record: " . $conn->error;
            }   
    }
}
//
//            herfra vil jeg så trække data for uge 40 , 41 --->

$sql="SELECT * FROM DATABASE";
.. osv

Det jeg reelt spøger  om, er om det er muligt at leve flere $SQL kommandoer ( eks flere "SELECTER" som i dette eksempel ) i samme script.  Eller skal det laves som selvstændige, kaldbare PHP-scripts ?  Eller hvordan "resetter" jeg base - pointeren. 

De forsøg jeg har lavet, virker ikke, men det kan være syntaksfejl fra min side..

Kristian
Avatar billede erikjacobsen Ekspert
07. oktober 2018 - 13:00 #1
Hvis du skal slette rækker før uge 39, skal det være:  WHERE UGE <= 39
Du har vendt ulighedstegnet forkert.

Du behøver ikke spørge om der er rækker, der opfylder betingelsen, før du laver en DELETE FROM. Det er ikke en fejl at slette rækker der ikke er der - hvis man kan sige det på den måde.

Men der er noget galt, når du kun har et ugenummer - for ved årsskiftet startet vi forfra med uge 1, og hvordan skelner du så mellem hvilket år ugenummeret hører til?
Avatar billede erikjacobsen Ekspert
07. oktober 2018 - 13:02 #2
Og iøvigt siger du SELECT * FROM DATABASE men DELETE FROM MyGuests  - altså ikke samme tabelnavn.
07. oktober 2018 - 16:23 #3
HEJ,

DU har ret.  Den skrevne tekst er taget fra 2 forskellige databaser (og det er en grandiøs fejl fra min  side- jeg burde have set det - enig.  og større end tegnet burde være vendt - osse her  -  enig. Men fordi jeg havde bøvlet med tingene i flere timer var jeg træt.  Men fejlen er der og min træthed undskylder det ikke, men det er en forklaring.

I den "rigtige udgave" er tingene imidlertid korrekte. Samme tabel samme parametre. 

Igen trætheden, som spillede mig et puds. Jeg satte mig i min bløde læ(n/s)estol og gennemtænkte problemet. Fandt frem til, som du også så rigtigt pointerer, at det med årsskift og ugenumre ikke var løst i min "løsning" (året manglede), så det måtte ny-tænkning til.  Det brugte jeg det meste af aftenen (og for den sags skyld osse 1 1/2 time om natten) til at gennemtænke.  Noget er løst (bl. a mySQLi tabellen er opdateret med kolonnen YEAR)  Den endelige  løsning er ikke kommet endnu, men jeg læser i øjeblikket om PHP date() strukturen versus stringtime (evt kombineret) og arbejder videre derfra. Jeg føler, at det kan være en løsning. 

Ang. sletningen af uge 39 (og derfra) betyder ikke så meget lige nu (udover at basen bliver det større), og at det kan løses senere. Evt kan jeg når jeg skal skabe næste uge (dvs. efterfølgende uge i HTML SELECTEN)  lave et PHP- script som  tester om UGE XX (her uge 39) er i basen og hvis JA sletter disse poster. 

Jeg skal nok finde en løsning.
Kristian
Avatar billede Rune1983 Ekspert
08. oktober 2018 - 08:58 #4
Med hensyn at tag højde for år.
Sad og tænkte om man ikke kunne giv ugenumrene følgende UgeID .
Eks. for uge 41
(2018 * 52) + 41 = 104977

Så vil du nemt kunne slette uger som er fx. 3 uger gamle.
Fjern alt hvor UgeID <= 104974

Ugenummer burde kunne findes via følgende uidregning nedenfor.
Ugenummer = UgeID - (52 * (UgeID%52))
Avatar billede erikjacobsen Ekspert
08. oktober 2018 - 09:27 #5
Nogle gange er der 53 uger på et år.

Enten som du skrev to felter hhv  uge og år.  Eller kombinere dem til fx 201841 i indeværende uge, men huske at uge 1-9 skal have foranstillede nuller:  201801
Avatar billede Rune1983 Ekspert
08. oktober 2018 - 11:31 #6
#5
Vil du så ikke få 2 UgeIDer for uge 1. 31/12 til 06/01
201853
201901
Avatar billede erikjacobsen Ekspert
08. oktober 2018 - 11:57 #7
#6
Det er veldefineret hvornår der er, og hvornår der ikke er, en uge 53. Der vil aldrig være en uge 53 der er lig med en uge 1 i det efterfølgende år.

Vi får en uge 53 i 2020.
08. oktober 2018 - 18:16 #8
HEJ

1000 tak for kommentarerne og de gode råd.  Jeg arbejder lige nu med at finde ud af hvordan jeg skal gøre tabellen om til "et flydende vidue", sådan at forstå, at aktuelle uge + 2 uger frem (ialt 3 uger) vil være den aktive/visbare dele af tabellen. Men af hensyn til administrationen (læs: regnskabet) skal der være et bagudrettet "slip" på mindst 2 uger bagud ( hvis vi skriver uge 44 nu,  så vises uge44, uge45 og uge46 i tabellen, vil tabellen starte med uge 42).  Når ugen44 går over i uge 45, kan jeg så slette uge 42, men det er ikke så kritisk (i hvertfald ikke lige nu, hvor årsskifte problematikken begynder at blive aktuel. (altså har året 52 eller 53 uger, og hvad skal vises i så fald.  Eks: er det uge 51 og året har 53 uger skal uge51-uge 53 vises. Har året 52 uger skal uge51, uge 52 og UGE 1 (næste år) vises.  Uge 52 er en kombination af ovenstående .

Jeg har en egendefineret algoritme, den fungerer, men er tung, klodset, så lige nu arbejder jeg med PHP funktionerne date(), stringtodate() og datetime() (muligvis nogen starter med stort D eller S // syntaksen ) for at finde en smartere metode omkring årsskiftet.  De foreløbige eksperimenter omkrin de 3 ovennævnte funktioner viser det jeg forventer, ved rigtigt input.

Så når årsskiftet er løst (PS: Godt Nyår !), går jeg i gang med UGESLETNINGEN.

Den med UGE -ÅR til Integer er taget ad notam. Tak til RUne ("professor-kollegaen").

KR
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester