Avatar billede causasui Nybegynder
24. marts 2003 - 12:40 Der er 10 kommentarer og
1 løsning

simpel join

Jeg har følgende tabeller(i denne sammenhæng):
del og forsk_del.
Forsk_del er min hjælpetabel og består af 3 poster: id, del_id, forsk_id .
Jeg vil gerne søge i forsk_del udfra et tildelt id som hedder forsk_id, og alle de steder hvor forsk_id forekommer skal den så hente del_id og dette del_id skal så bruges til at hente en post ved navn titel i tabel del.
Håber det giver mening !
Avatar billede krsk Nybegynder
24. marts 2003 - 12:57 #1
select a.del_id, a.title
from del a
where a.tabelid in (select del_id
                    where forsk_id = [det forsk_id du kommer med]
                  )

Jeg kan ikke læse hvad der nøglen mellem del_id og title men i dette eksempel har jeg antaget at feltet hedder tabelid.

/Kristian
Avatar billede krsk Nybegynder
24. marts 2003 - 12:59 #2
ups glemte from i den nestede select:

select a.del_id, a.title
from del a
where a.tabelid in (select del_id
                    from forsk_del
                    where forsk_id = [det forsk_id du kommer med]
                  )
Avatar billede causasui Nybegynder
24. marts 2003 - 13:04 #3
->krsk
Ok, jeg prøver det lige, det kommer til at ta lidt tid, men vender tilbage hurtigst muligt!
Avatar billede causasui Nybegynder
24. marts 2003 - 13:45 #4
->krsk
Mangler der ikke nogle quotes osv..
$query = "select a.del_id, a.title
from del a
where a.tabelid in (select del_id
                    from forsk_del
                    where forsk_id = [det forsk_id du kommer med]
                  )"
eller sådan noget lign..??
Avatar billede krsk Nybegynder
24. marts 2003 - 13:55 #5
Jeg har bare skrevet den rene sql, så det gør der sikkert hvis du skal bruge den i anden sammenhæng...længe siden jeg har puslet med mysql...og kan ikke teste det her. Men har du ikke et querytool hvor du kan selecte fra?
Avatar billede causasui Nybegynder
24. marts 2003 - 14:59 #6
->krsk
Min query ser nu sådan her ud, navnene er lidt anderledes i forhold til før, men det er de korrekte.
$query = "SELECT a.del_id, a.titel FROM imio_del a WHERE a.del_id IN (SELECT del_id FROM imio_forsk_del WHERE forsk_id = ['$forsk_id'])";
            $result = mysql_query($query) or exit ("Fejl: Kunne ikke køre 3");
Og denne query vil ikke køre... Jeg synes at ha læst at man ikke kan køre nested querys i mysql.. men det er sikkert mig der er helt forkert på den, har ikke meget forstand på mysql!!
Avatar billede krsk Nybegynder
24. marts 2003 - 15:26 #7
Hej

1) Du skal have mysql 4.1 for at nestede selects virker.

2) Hvis du ikke har det så er dette den nestede skrevet om til en left join:

select del.del_id, del.title from del left join forsk_del on del.tableid=forsk_del.del_id where forsk_del.forsk_id = [det forsk_id du kommer med]
Avatar billede krsk Nybegynder
24. marts 2003 - 15:27 #8
Her linket til mysql forklaring omkring nestede selects eller sub selects som de kalder dem:

http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html
Avatar billede causasui Nybegynder
24. marts 2003 - 15:58 #9
Jeg har omskrevet det til flg:
$query = "SELECT imio_del.del_id, imio_del.titel FROM imio_del LEFT JOIN imio_forsk_del ON imio_del.del_id=imio_forsk_del.del_id WHERE imio_forsk_del.forsk_id = ['$forsk_id']";

DB dumbs:
Hjælpetabel:
CREATE TABLE imio_forsk_del (
  id tinyint(4) NOT NULL auto_increment,
  forsk_id tinyint(4) NOT NULL default '0',
  del_id tinyint(4) NOT NULL default '0',
  UNIQUE KEY id (id)
) TYPE=MyISAM COMMENT='hjælpetabel';

Tabel hvor jeg skal hente titel og del_id:
CREATE TABLE imio_del (
  del_id tinyint(4) NOT NULL auto_increment,
  dato date default NULL,
  titel varchar(50) default NULL,
  tidsplan varchar(100) default NULL,
  tekst varchar(200) default NULL,
  laesmere mediumtext,
  e_titel varchar(50) default NULL,
  e_tidsplan varchar(100) default NULL,
  e_tekst varchar(200) default NULL,
  e_laesmere mediumtext,
  kat varchar(10) default NULL,
  status char(3) default NULL,
  oprettetaf varchar(4) default NULL,
  UNIQUE KEY del_id (del_id)
) TYPE=MyISAM;

Kan du se om jeg gør noget forkert udfra ovenstående opl.?
Det vil simpelthen bare ikke køre, har prøvet alverdens kombination!!
Avatar billede causasui Nybegynder
24. marts 2003 - 16:31 #10
->krsk
Fik læst en del om left joins bla. her:
http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.shtml
Sådan her skal det se ud:
$query = "SELECT imio_del.del_id, imio_del.titel FROM imio_del LEFT JOIN imio_forsk_del ON imio_del.del_id=imio_forsk_del.del_id WHERE imio_forsk_del.forsk_id = '$forsk_id'";
Nu virker det, tak for hjælpen
Avatar billede krsk Nybegynder
24. marts 2003 - 17:07 #11
np :-)
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