Avatar billede lionman Nybegynder
17. december 2002 - 12:55 Der er 19 kommentarer og
1 løsning

select fra flere tabeller...

Jeg har 3 tabeller

p_kategori
- KT_ID
- KT_Navn

P_familie
- PF_ID
- PF_Name
- PF_D_Name

P_planter
- PL_ID
- PL_Fam
- PL_kat

Og ønsker at finde de familier der er tilknyttet en kategori, på baggrund af oplysninger fra p_planter....

Er dette den rette syntaks (Kan ikke få det til at virke)


$Fam_Name = mysql_query("SELECT p_familie.PF_ID,p_familie.PF_D_Name,p_planter.PL_Fam,p_planter.PL_kat,p_kategori.KT_ID FROM p_familie,p_planter,p_kategori  WHERE (p_kategori.KT_ID = 13 AND (p_planter.PL_Fam = p_familie.PF_ID))");

Håber nogen kan hjælpe...
Avatar billede erikjacobsen Ekspert
17. december 2002 - 12:58 #1
Ser umiddelbart ok ud. Prøv æige

  $Fam_Name = mysql_query(" .... ") or die(mysql_error());

så ser du eventuelle syntaks fejl.
Avatar billede erikjacobsen Ekspert
17. december 2002 - 13:00 #2
Hov du skal have en AND mere der knytter kategori tabellen til de andre.
Måske

  AND P_planter.PL_kat=P_kategori.KT_ID
Avatar billede lionman Nybegynder
17. december 2002 - 13:07 #3
Jeg har kategori ID det fastsætter jeg selv - I dette tilfælde 13  ;-))
Avatar billede erikjacobsen Ekspert
17. december 2002 - 13:10 #4
Det kan jeg se, men det 13 tal står i et af de andre felter i en
af de andre tabeller - ikke?
Avatar billede arnvig Nybegynder
17. december 2002 - 13:12 #5
Det ser ikke godt ud:

Du er nødt til at have en ralation mellem plante og kategori
f,eks.
AND P_planter.PL_kat = 13

ellers får du alt for mange rækker
Avatar billede arnvig Nybegynder
17. december 2002 - 13:12 #6
ralation = relation
Avatar billede arnvig Nybegynder
17. december 2002 - 13:15 #7
Dine planter har fremmed nøgle til to tabeller : Famillie og Kategori
du skal anvende begge nøgler i din join, ellers går det galt . Du får (antal kategorier) * (antal planter) * (antal familier) som løsning.
Avatar billede lionman Nybegynder
17. december 2002 - 13:33 #8
Er efterhånden lidt skeløjet (er newbie :-((

Er dette den korrekte syntax :

$Fam_Name = mysql_query("SELECT p_familie.PF_ID,p_familie.PF_D_Name,p_planter.PL_Fam,p_planter.PL_kat FROM p_familie,p_planter WHERE (p_planter.PL_kat = 13 AND (p_planter.PL_Fam = p_familie.PF_ID))");
Avatar billede erikjacobsen Ekspert
17. december 2002 - 13:35 #9
syntaksen er sikkert god nok. Du mangler en AND ... den vi snakker om.
Hvad sker der helt præcist når du kører det der.
Avatar billede lionman Nybegynder
17. december 2002 - 13:45 #10
Der sker ikke noget....!
Avatar billede erikjacobsen Ekspert
17. december 2002 - 13:55 #11
Nej - hvis det er den eneste sætning du udfører i dit script,
så sker der ikke mere. Står der mere? Og: hvorfor gar du ikke
lavet den ændring jeg foreslog dig allerførst?
Avatar billede lionman Nybegynder
17. december 2002 - 13:58 #12
Ups..

Nu sagde den noget med #resourceID2

Hmmm...

Prøvede med denne syntax, men der får jeg en mysql error:

$Fam_Name = mysql_query("SELECT * FROM p_familie WHERE ((p_planter.PL_kat = 13) AND (p_planter.PL_Fam = p_familie.PF_ID))");


Forstår ikke helt det ekstra AND - jeg vælger jo alle dem hvor PL_kat=13 og hvor Plantens familie_ID er lig med familiens ID...???
Avatar billede erikjacobsen Ekspert
17. december 2002 - 14:01 #13
Det har min "kollega" ellers forklaret. Hvorfor gør du ikke som
jeg foreslår i mit første indlæg?
Avatar billede lionman Nybegynder
17. december 2002 - 14:06 #14
OK - Nu hedder syntaksen :

$Fam_Name = mysql_query("SELECT p_familie.PF_ID,p_familie.PF_D_Name,p_planter.PL_Fam,p_planter.PL_kat FROM p_familie,p_planter WHERE ((p_planter.PL_kat = 13) AND (p_planter.PL_Fam = p_familie.PF_ID)AND (p_planter.PL_kat=P_kategori.KT_ID))");

Så får jeg følgende fejl i mit output

mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Damn.... Burde være blevet bager i stedet...:-))
Avatar billede erikjacobsen Ekspert
17. december 2002 - 14:09 #15
Nå, jeg opgiver - og hopper ud af spørgsmålet. Hvis du ikke
vil gøre som jeg foreslår, så vil jeg ikke spilde mere tid på dig.
Avatar billede lionman Nybegynder
17. december 2002 - 14:22 #16
Du må meget undskylde, men jeg prøver :-((

Er dette ikke den syntax som du foreslog...?

$Fam_Name = mysql_query("SELECT p_familie.PF_ID,p_familie.PF_D_Name,p_planter.PL_Fam,p_planter.PL_kat FROM p_familie,p_planter,p_kategori WHERE ((p_planter.PL_kat = 13) AND (p_planter.PL_Fam = p_familie.PF_ID)AND(p_planter.PL_kat=p_kategori.KT_ID))")or die(mysql_error());
Avatar billede arnvig Nybegynder
18. december 2002 - 12:30 #17
SELECT p_familie.PF_ID,p_familie.PF_D_Name,p_planter.PL_Fam,p_planter.PL_kat
FROM p_familie,p_planter,p_kategori
WHERE p_planter.PL_kat = 13
AND  p_planter.PL_Fam = p_familie.PF_ID
AND  p_planter.PL_kat = p_kategori.KT_ID

er korrekt
Avatar billede arnvig Nybegynder
18. december 2002 - 12:33 #18
Når du refererer en kolonne i din WHERE-clause
så skal den være med i din FROM-clause

Drop overflødige paranteser.
Drop redundante kolonner i din SELECT-clause

Lær SQL
Avatar billede arnvig Nybegynder
19. december 2002 - 10:22 #19
Nå. Lionman, skulle du ikke se at få lukket spørgsmålet ?
Avatar billede arnvig Nybegynder
01. januar 2003 - 20:42 #20
Nå. Lionman, skulle du ikke se at få lukket spørgsmålet ?
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