Avatar billede pitzen Nybegynder
08. april 2008 - 09:15 Der er 10 kommentarer og
1 løsning

Hovedbrud til dem der har styr på queries

Hej eksperter.

Jeg må selv stå af på denne opgave. Men måske kan nogle af jer løse den.

Jeg har 3 tabeller:
- point_log (status,point,ekspedition_id,kampagne_id)
- kampagner (id,point)
- ekspeditioner (id,godkendt)

Jeg skal foretage følgende 2 opdatering af point_log:

1. Jeg skal tjekke for om godkendt='1' i tabellen ekspeditioner, hvor point_log.ekspedition_id=ekspeditioner.id - hvis dette er tilfældet, skal point_log.status sættes til "godkendt". Kort sagt; alle rækker i tabellen have sin status undersøgt i 'ekspeditioner' og herefter opdateres.

2. Jeg skal overføre kampagner.point til point_log.point hvor point_log.kampagne_id=kampagner.id - Kort sagt; jeg skal have overført point-værdien til point_log hvor der er sammenhæng mellem id'erne.

Jeg har prøvet at lave dette i php, men det kan ikke lade sig gøre, da dette skal berøre knap 10.000 rækker.

Håber det kan løses :)

Mvh P
Avatar billede sherlock Nybegynder
08. april 2008 - 10:27 #1
1.

update point_log p
set status = godkendt
where p.ekspedition_id in
  (select id from ekspeditioner where godkendt = '1')


2.

insert into point_log p (status, point, ekspedition_id, kampagne_id)
select ('overført???', k.point, k.id, e.id
from kampagner k, ekspeditioner e
where ????

Og her gik jeg i stå :)
Skal der ikke være en sammenhæng mellem ekspeditioner og kampagner ?
Hvordan skal første record i en kampagne komme i point_log, når
"hvor point_log.kampagne_id=kampagner.id" skal være sandt?

Jeg er forvirret over hvordan dine data "lever" i de 3 tabeller.
Avatar billede pitzen Nybegynder
08. april 2008 - 11:40 #2
Dit svar til 1. virker super. Tak :)

Mht. til Nr 2.

Der skal ikke insættes nye rækker, men alle rækkene skal derimod have opdateret cellen med point.
Den værdi skal hentes fra kampagner. Værdien findes ved at slå kampagne_id'et fra point_log op i kampagner under id. Et eksempel:

tabellen kampagner
+---------+-----------+
| id      | point    |
+---------+-----------+
| 14      | 422      |
+---------+-----------+

tabellen point_log
+-------------+-----------+----------+
| kampagne_id | point    |  status  |
+-------------+-----------+----------+
| 14          | x        | godkendt |
+-------------+-----------+----------+

Her skal x erstattes med 422 vha. id 14.

håber det gav mening :)
Avatar billede pitzen Nybegynder
08. april 2008 - 11:41 #3
Det gik ik så godt med formateringen ;) Hehe
Avatar billede sherlock Nybegynder
08. april 2008 - 12:14 #4
Utestet, da jeg ikke har adgang til en database.

update point_log p
set p.point = select k.point
    from kampagner k
      where p.kampagne_id = k.id
Avatar billede pitzen Nybegynder
08. april 2008 - 12:42 #5
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select k.point
    from kampagner k
      where p.kampagne_id = k.id' at line 2
Avatar billede sherlock Nybegynder
08. april 2008 - 12:52 #6
Hvis der ikke er andre der har et bud inden, kigger jeg på det i aften.
Avatar billede arne_v Ekspert
09. april 2008 - 01:38 #7
måske bare et par parenteser:

update point_log
set point = (select point from kampagner where point_log.kampagne_id = kampagne.id)
Avatar billede sherlock Nybegynder
09. april 2008 - 07:31 #8
UPDATE point_log p , kampagner k
SET p.point = k.point
WHERE p.kampagne_id = k.id;
Avatar billede pitzen Nybegynder
09. april 2008 - 08:55 #9
1000 tak endnu en gang!

Smider du et svar?
Avatar billede sherlock Nybegynder
09. april 2008 - 09:51 #10
:)
Avatar billede pitzen Nybegynder
09. april 2008 - 11:49 #11
Jeg har desuden oprettet et nyt indlæg i denne kategori :)

Den kan du sikkert også løse ;)
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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