Avatar billede gtu Nybegynder
07. januar 2010 - 14:20 Der er 15 kommentarer og
1 løsning

2 x user_id til navn

Jeg har 2 tabller som ser ud som følgende

Table: user
col: id, navn

Table: order
col: id, user_1, user_2


Vil gerne have user_1 og user_2 navn ud med en SQL linie..

SELECT user_1, user_2
FROM order
WHERE id=1

Så for jeg deres id nr..

SELECT navn, user_2
FROM order, user
WHERE (order.user_1=user.id) AND (id=1)

Så har jeg navnet på den første bruger.. men hvad hvis jeg også vil have navnet på user_2 med samme query?????
Jeg kan jo ikke tilføje

For dette er jo helt forkert
SELECT navn, navn
FROM order, user
WHERE (order.user_1=user.id) AND (order.user_2=user.id) AND (id=1)
Avatar billede erikjacobsen Ekspert
07. januar 2010 - 14:44 #1
Du benytter tabellen user to gange, med 2 navne. Sådan ca.

SELECT u1.navn,u2.navn FROM order JOIN user as u1 ON u1.id=order.user_1 JOIN user as u2 ON u2.id=order.user_2
Avatar billede michael_stim Ekspert
07. januar 2010 - 14:49 #2
SELECT a.navn FROM user a, order b WHERE (b.user_1=a.id OR b.user_2=a.id) AND a.id=2 (eller b.id afhængigt af hvilken du tager efter)
Avatar billede showsource Seniormester
07. januar 2010 - 15:37 #3
Er order ikke et mysql-reserveret navn ?
Avatar billede michael_stim Ekspert
07. januar 2010 - 15:45 #4
Det har du helt ret i showsource ;o) `order`
Avatar billede gtu Nybegynder
07. januar 2010 - 18:50 #5
hmm det kunne jeg ikke få til at virke..

Fejl: Column 'user_id' in field list is ambiguous


Ja, "order" er reservert navn :-)her er min rigtige sql query

SELECT u1.user_name, u2.user_name
FROM tbl_tilbud, tbl_customer JOIN tbl_user as u1 ON u1.user_id=tbl_tilbud.user_id JOIN tbl_user as u2 ON u2.user_id=tbl_tilbud.user_id
WHERE (tbl_customer.ct_id=tbl_tilbud.od_customer) AND (od_accept=0)
Avatar billede erikjacobsen Ekspert
07. januar 2010 - 19:41 #6
Jeg kan ikke se hvor du kan bruge user_id, så det er tvetydigt.

Men du skriver
  tbl_tilbud.user_id
to gange - det passer ikke helt med dit eksempel tidligere.
Avatar billede gtu Nybegynder
07. januar 2010 - 19:47 #7
det skulle være tbl_tilbud.od_booker

så jeg har tbl_tilbud.od_booker og tbl_tilbud.user_id
og begge skal hive user_name ud fra tbl_user

men stadig fejl: Unknown column 'tbl_tilbud.user_id' in 'on clause'

SELECT u1.user_name, u2.user_name
FROM tbl_tilbud, tbl_customer JOIN tbl_user as u1 ON u1.user_id=tbl_tilbud.user_id JOIN tbl_user as u2 ON u2.user_id=tbl_tilbud.od_booker
WHERE (tbl_customer.ct_id=tbl_tilbud.od_customer) AND (od_accept=0)
Avatar billede erikjacobsen Ekspert
07. januar 2010 - 19:59 #8
Det er en anden fejl end før: feltet user_id findes ikke tabellen tbl_tilbud
Avatar billede gtu Nybegynder
07. januar 2010 - 20:04 #9
Jo, det gør den.
Avatar billede gtu Nybegynder
07. januar 2010 - 21:03 #10
hmm det virker og få ikke den fejl hvis jeg flere where delen

WHERE (tbl_customer.ct_id=tbl_tilbud.od_customer) AND (od_accept=0)

?? Hvad er der galt med den?
Avatar billede gtu Nybegynder
07. januar 2010 - 21:16 #11
Får ikke fejlen: Unknown column 'tbl_tilbud.user_id' in 'on clause'

hvis jeg fjerner WHERE (tbl_customer.ct_id=tbl_tilbud.od_customer) AND (od_accept=0)

??
Avatar billede erikjacobsen Ekspert
07. januar 2010 - 21:47 #12
Det er lidt svært at sige noget kvalificeret om ud fra dine oplysninger. Du er velkommen til at vise de konkrete sql-sætninger, der virker eller ikke virker. Og definitionerne af tabellerne.

Men kan det være en gammel sag med MySQL, som ville kløjs i den blanding af to forskellige måder at joine tabeller på, men JOIN og i WHERE-delen. Jeg husker ikke præcis hvordan det var.

Dvs. du kan prøve at flytte tbl_customer.ct_id=tbl_tilbud.od_customer op i ON-del på en ny JOIN

...(måske)...
Avatar billede gtu Nybegynder
08. januar 2010 - 08:51 #13
hmm har fået det til at virke nu..
men syndes ikke det giver mening hvorfor?


Denne linie virker.
SELECT u1.user_name, u2.user_name
FROM tbl_tilbud, tbl_customer JOIN tbl_user as u1 ON u1.user_id=tbl_tilbud.user_id JOIN tbl_user as u2 ON u2.user_id=tbl_tilbud.od_booker

Men virker ikke hvis jeg tilføjer
WHERE (tbl_customer.ct_id=tbl_tilbud.od_customer) AND (od_accept=0)

men virker med WHERE delen hvis jeg ændre FROM tbl_tilbud, tbl_customer til FROM tbl_customer, tbl_tilbud

så nu virker alt! fatter bare ikke hvorfor customer skulle stå først

Men tak for hjælpen Erik
Erik er det ok jeg giver pointene til Michael nu når du ikke vil have dem?
Avatar billede michael_stim Ekspert
08. januar 2010 - 09:00 #14
1. Jeg har ikke kommet med noget brugbart i dette spørgsmål
2. Jeg samler såmænd heller ikke på point (bliver hverken mæt eller rig af dem)

Så tag du bare dine point selv ;o)
Avatar billede erikjacobsen Ekspert
08. januar 2010 - 09:04 #15
Det ligner en gammel bug i MySql, hvor den kløjs i det i bestemte tilfælde. Du kunne prøve, som jeg foreslog, at lave alt JOIN-arbejde med JOINs - sådan ca. som her:


SELECT u1.user_name, u2.user_name
FROM tbl_tilbud JOIN tbl_user as u1 ON u1.user_id=tbl_tilbud.user_id JOIN tbl_user as u2 ON u2.user_id=tbl_tilbud.od_booker
JOIN tbl_customer ON tbl_customer.ct_id=tbl_tilbud.od_customer
WHERE (od_accept=0)
Avatar billede gtu Nybegynder
08. januar 2010 - 10:31 #16
Den query virker også ..

Tak for hjælpen
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