Avatar billede Slettet bruger
15. marts 2005 - 16:40 Der er 23 kommentarer og
1 løsning

alt fra én tabel der ikke er i en anden :S

Jeg har 2 tabeller:

cykler | c_f (står for: cykler_forhandler

i c_f er der 3 kolonner:

cykelid | forhandlerid | pris

Jeg vil gerne have en query hvor jeg får alle cykler der _ikke_ tilhører mig (logget ind, $_SESSION['brugerid'] er mit forhandlerid).

Jeg vil gerne have det i én query
Avatar billede jpvj Nybegynder
15. marts 2005 - 16:43 #1
SELECT * FROM cykler WHERE id not IN SELECT cykelid FROM c_f
Avatar billede jpvj Nybegynder
15. marts 2005 - 16:43 #2
Jeg er ikke up-to-date med MySQL, men mon ikke den på nyværende tidspunkt understøtter sub-selects? :-)
Avatar billede Slettet bruger
15. marts 2005 - 16:45 #3
den siger fejl ved "SELECT cykelid FROM c_f"
Avatar billede barklund Nybegynder
15. marts 2005 - 16:50 #4
Nej, der er ikke subselects i den aktuelle version (jeg bøvlede med den ovre i php-kategorien)
Avatar billede arne_v Ekspert
15. marts 2005 - 16:50 #5
Konstruktionen kræver MySQL 4.1.

I ældre versioner:

SELECT cykler.*
FROM cykler LEFT JOIN c_f ON cykler.id = c_f.cykelid AND c_f.forhandlerid = X
WHERE c_f.cykelid IS NULL
Avatar billede Slettet bruger
15. marts 2005 - 17:01 #6
mange tak arne_v, det virker præcis som det skal

Smid svar tak :o)
Avatar billede barklund Nybegynder
15. marts 2005 - 17:09 #7
Aij, jeg var sikker på, at jeg havde været igennem den version og fået den forkastet også - ih altså, nu nægter jeg ikke at kunne finde ud af det igen!
Avatar billede Slettet bruger
15. marts 2005 - 17:09 #8
Kan det lade sig gøre at lave en query der gør følgende:

Finder alle cykler jeg har og sætter prisen til min pris

De rækker jeg ikke har skal have "NULL" som pris, men skal stadig være med
Avatar billede Slettet bruger
15. marts 2005 - 17:10 #9
Hehe barklund, vi havde prøvet så mange gange, og så kan arne så utrolig hurtigt :P
Avatar billede barklund Nybegynder
15. marts 2005 - 17:15 #10
Den sidste kan jeg vist godt - det er jo bare en left join:

SELECT cykler.id, c_f.pris
FROM cykler LEFT JOIN c_f ON cykler.id = c_f.cykelid AND c_f.forhandlerid = X
Avatar billede arne_v Ekspert
15. marts 2005 - 17:45 #11
svar
Avatar billede arne_v Ekspert
15. marts 2005 - 17:46 #12
det sidste spørgsmål skal jeg lige have forklaret lidt nærmere
Avatar billede Slettet bruger
15. marts 2005 - 17:50 #13
Jeg vil gerne have en liste med alle cyklerne.
dette kan nemt gøres med en SELECT * FROM c_f GROUP BY cykelid

MEN.. jeg vil gerne have at alle cykler JEG har skal have _min_ pris, mens cykler jeg _ikke_ har skal have NULL som pris


håber at du forstår
Avatar billede Slettet bruger
15. marts 2005 - 17:52 #14
Men det er egentlig ligemeget arne, tak for hjælpen :)

jeg har lavet en SELECT * FROM c_f GROUP BY cykelid, og så senere sagt

med en "if" set om jeg har prisen :)
Avatar billede barklund Nybegynder
15. marts 2005 - 17:56 #15
Men det er da præcis hvad en left join gør?

SELECT cykler.id, c_f.pris
FROM cykler LEFT JOIN c_f ON cykler.id = c_f.cykelid AND c_f.forhandlerid = X

Eller er jeg helt galt på den?
Avatar billede Slettet bruger
15. marts 2005 - 17:58 #16
hmm du er lidt gal på den.. for det første skal jeg ikke bruge en join, idet jeg jo har cyklens id i c_f.cykelid :)

og for det andet skal jeg jo også have de cykler med som jeg ikke selv har :)
Avatar billede barklund Nybegynder
15. marts 2005 - 18:20 #17
Men virker ovenstående join ikke som forventet?
Avatar billede Slettet bruger
15. marts 2005 - 18:26 #18
ikke som det jeg skal bruge, den giver mig ikke de rækker der ikke har mig som forhandler
Avatar billede arne_v Ekspert
15. marts 2005 - 23:11 #19
Måske er det:

SELECT cykelid,forhandlerid,IF(forhandlerid=X,pris,NULL) FROM c_f GROUP BY cykelid,

du leder efter ?
Avatar billede Slettet bruger
16. marts 2005 - 14:50 #20
lige præcis :)

bruger du ét bestemt sted på nettet hvor du leder efter dine queries osv, (udover manualen) så jeg måske også kunne lære lidt. :o)
Avatar billede Slettet bruger
16. marts 2005 - 16:17 #21
Hmm nej det virker ikke, den finder ikke pris:

$query = "
            SELECT
                cykelid as id,
                IF(forhandlerid=". $_SESSION['brugerid'] .",pris,NULL)
            FROM
                c_f
            GROUP BY
                id";

der er "pris" tom
Avatar billede arne_v Ekspert
16. marts 2005 - 17:07 #22
$query = "
            SELECT
                cykelid as id,
                IF(forhandlerid=". $_SESSION['brugerid'] .",pris,NULL) AS pris2
            FROM
                c_f
            GROUP BY
                id";

of så henter du feltet pris2 ud af query resulatet
Avatar billede arne_v Ekspert
16. marts 2005 - 17:08 #23
MySQL dokumentationen er online  på nettet.

(og så har jeg mere end 15 års erfaring med SQL og har også på et tidspunkt undervist
i det)
Avatar billede Slettet bruger
16. marts 2005 - 20:05 #24
hehe, de 15 år har nok en rimelig stor betydning. Mange tak arne_v :)
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