Just nu i M3-nätverket
Gå till innehåll

Uppdatera en databas


Diver Girl

Rekommendera Poster

Jag vet inte om detta hör hemma här i PHP eller om det ska vara i MySQL-forumet.

 

I alla fall.

Jag lägger till projekt i min databas med hjälp av formulär.

Varje projekt består sedan av olika delprojekt också insertade i databasen med hjälp av formulär.

Varje delprojekt har ett unikt id, men ska också ha en delprojekts-kod.

Denna kod ska alltid börja med 1 och stiga med ett för varje delprojekt som finns i projektet.

Alltså: i Projekt 1 finns delprojekt 01, 02, 03 osv.

i Projekt 2 finns delprojekt 01, 02, 03 osv

 

Och det är här jag inte vet hur jag ska göra för att få det rätt.

För om man raderar ett delprojekt ska numreringen fortfarande vara rätt - 1,2,3... (inga hopp i numreringen alltså).

 

Jag började med att göra en count på antalet delprojektsrader tillhörande ett visst projekt, göra en for-loop och på sätt inserta i databasen.

Nu fick jag inte det alls rätt och inser att det är nog inget bra sätt heller.

 

Är det någon som har ett bra tips på hur jag ska få till en sådan funktion?

 

Tacksam för hjälp!

 

/DiverGirl

 

 

 

Länk till kommentar
Dela på andra webbplatser

När du tar bort ett delprojekt så måste du minska delprojektskoden med 1 för alla delprojekt i samma projekt, där delprojektskoden är större än det borttagna delprojektets kod (puh).

 

Alltså, innan du tar bort ett delprojekt, se till att du sparar delprojektskoden i nån variabel. Och sen:

UPDATE delprojekt SET kod=kod - 1 WHERE projekt = $projektid AND kod > $borttagna_delprojektets_kod

 

Länk till kommentar
Dela på andra webbplatser

Det var inte lätt att få ihop den meningen... :-)

 

Men nu är jag inte med riktigt. Jo, din kod förstår jag.

 

Tyvärr ligger mitt problem redan i fasen tidigare. (Det var nog min formulering i frågan som var lite oklar, ber om ursäkt för det). Jag har inte ens lyckats få dit koderna med automatik. Hittills får jag samma kod på alla rader, vilket innebär att den lägger in sista värdet på alla rader. Alltså: alla delprojekt får samma kod.

 

Jag vet inte hur jag ska göra för att koden att börja på 1 varje gång man är i ett nytt projekt.

ID är ju rullande, den ökar ju hela tiden med 1, med ett default startvärde, inga konstigheter. Men koden fungerar ju inte riktigt likadant, även om den ska öka med 1 den också.

 

Sen förstår jag (nog) hur du menar med omnumreringenman av koderna, den kodsnutten är väldigt användbar!

 

/DiverGirl

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Räkna antalet delprojekt i samma projekt varje gång du lägger till ett nytt delprojekt, och addera med 1. Du kan göra det i ett svep med INSERT...SELECT:

INSERT INTO delprojekt SELECT $projektid, COUNT(*) + 1, '$a', '$b' FROM delprojekt WHERE projektid = $projektid

Här förutsätter jag att tabellen delprojekt har 4 kolumner: projektid:t, koden och ytterligare två kolumner vars värden finns i variablerna $a och $b.

 

Om det inte finns några delprojekt för projektet, så kommer COUNT(*) att bli 0 och delprojektkoden blir då 1.

 

Länk till kommentar
Dela på andra webbplatser

Tack - nu börjar bilden klarna... ;-)

 

Ok, sån query har jag aldrig kört.

Så nu får du ursäkta dumma frågor:

 

Om jag förstår dig rätt så är $projectid, projektets id som jag har skickat med i min session (inte delprojektets id). Och variablerna a och b är de värden jag får från mitt formulär när jag lägger till mitt delprojekt??

 

Värden som man skriver efter SELECT - jag antar att dessa måste ligga i rätt ordning som motsvarar delprojektets tabell/kolumner i databasen?

Kan man även välja som vid en vanlig insert vilka fält som ska fyllas i, med t ex insert into tabell (xx) values (yyy)?

 

/DiverGirl

 

 

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Nu har jag löst det med min aktivitetskoder.

Inte så tjusigt som zerblat kanske, men det fungerar, det är huvudsaken.

 

Jag gjorde först en count-query, var värde + 1 jag lagrar i en variabel.

Den variabeln placerar jag i insert-queryn.

Samma sak som ditt visade exempel fast i fler steg. Och det blev exakt som jag vill ha det.

 

Tack så mycket!

 

/DiverGirl

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...