/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Problemer med en LEFT JOIN i mySQL
Fra : Thomas Løjmann Jørge~


Dato : 01-08-06 08:25

Hej,

Jeg sidder og bokser lidt med en SQL query, som driller.
Der skal hentes data fra 3 tabeller, og sættes sammen.

Min query ser sådan her ud, men viser for meget:
SELECT tracks.name AS TrackName, tracks.website, days.name AS DayName,
days.date, days.price, days.member, days.type FROM subscription LEFT
JOIN tracks ON (tracks.trid = subscription.trid) LEFT JOIN days ON
(days.trid = subscription.trid) WHERE subscription.aid =
'$_SESSION[aid]' AND days.active = '1'

$_SESSION[aid] indeholder mit bruger ID, som også findes i tabellen
subscription tabellen.

SQL for de 3 tabeller ser sådan her ud:
CREATE TABLE `days` (
`name` varchar(100) NOT NULL,
`date` varchar(10) NOT NULL,
`price` varchar(10) NOT NULL,
`member` int(1) NOT NULL default '0',
`type` int(1) NOT NULL,
`active` int(1) NOT NULL,
`aid` int(11) NOT NULL,
`trid` int(11) NOT NULL,
`did` int(11) NOT NULL auto_increment,
PRIMARY KEY (`did`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `days` (`name`, `date`, `price`, `member`, `type`, `active`,
`aid`, `trid`, `did`) VALUES ('Begynder dag for mænd', '12-12-2006',
'1000', 0, 1, 1, 1, 1, 1),
('Begynder dag for kvinder', '13-12-2006', '9999', 0, 2, 1, 1, 1, 2),
('Test track day', '11-09-2006', '799', 0, 2, 1, 1, 2, 3);

CREATE TABLE `subscription` (
`aid` int(11) NOT NULL,
`trid` int(11) NOT NULL,
`sid` int(11) NOT NULL auto_increment,
PRIMARY KEY (`sid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `subscription` (`aid`, `trid`, `sid`) VALUES (1, 1, 1),
(1, 2, 2);

CREATE TABLE `tracks` (
`name` varchar(100) NOT NULL,
`country` varchar(100) NOT NULL,
`address` varchar(100) NOT NULL,
`zip` int(11) NOT NULL,
`city` varchar(100) NOT NULL,
`website` varchar(250) NOT NULL,
`trid` int(11) NOT NULL auto_increment,
PRIMARY KEY (`trid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `tracks` (`name`, `country`, `address`, `zip`, `city`,
`website`, `trid`) VALUES ('Ring Knutstorp', 'xx', 'xx', 11, 'xx',
'http://www.ringknutstorp.com/', 1),
('Sturup Raceway', 'xx', 'xx', 11, 'xx', 'http://www.sturupraceway.dk/', 2);

Det jeg vil, er at kigge i tabellen subscription og finde alle de entry
som aid er det samme som min variabel $_SESSION[aid].
I det her tilfælde, regner jeg med at få 2 rækker retur. Men den giver
mig alle rækkerne.

Kan mit udtryk skrives i en SQL query eller skal jeg programmer mig ud
af det via PHP?

/Thomas

 
 
Jan Bachman (01-08-2006)
Kommentar
Fra : Jan Bachman


Dato : 01-08-06 22:15

On Tue, 01 Aug 2006 09:25:19 +0200, Thomas Løjmann Jørgensen
<lojmann@lojmann.dk> wrote:

>I det her tilfælde, regner jeg med at få 2 rækker retur. Men den giver
>mig alle rækkerne.

Jeg koger det lige lidt ned for bedre at kunne overskue sagen.

subscription (aid,trid)
1,1
1,2

days (active,aid,trid)
1,1,1
1,1,1
1,1,2

tracks (trid)
1
2

SELECT felter
FROM subscription
LEFT JOIN tracks ON subscription.trid=trakcs.trid
LEFT JOIN days ON subscripton.trid=days.trid
WHERE subscription.aid=1
AND days.active=1

Du får tre poster returneret i ovenstående. Der er to match på trid=1
i days.

/Jan

Thomas Løjmann Jørge~ (02-08-2006)
Kommentar
Fra : Thomas Løjmann Jørge~


Dato : 02-08-06 08:30

Hej Jan,

Tak for input, men det løser ikke problemet.
Henter stadig det hele, hvilket er for meget... :/

/T

Jan Bachman (03-08-2006)
Kommentar
Fra : Jan Bachman


Dato : 03-08-06 16:07

On Wed, 02 Aug 2006 09:30:28 +0200, Thomas Løjmann Jørgensen
<lojmann@lojmann.dk> wrote:

>Tak for input, men det løser ikke problemet.
>Henter stadig det hele, hvilket er for meget... :/

Hvad er "det hele" sådan helt præcist, og hvad ønsker du præcist
returneret?

Mit svar beskriver kun den nøglemæssige kerne din situation. Det er
ikke et løsningsforslag.

Du får to poster returneret på trid=1, da der er to poster i "days",
der matcher dette, plus én post for trid=2. I alt tre poster.

/Jan

Thomas Løjmann Jørge~ (27-08-2006)
Kommentar
Fra : Thomas Løjmann Jørge~


Dato : 27-08-06 20:06

Hej,

Sorry det sene svar, men har været på ferie... :)

For at beskrive det lidt bedre.
Jeg har 4 tabeller
account, track, days, subscription

I tabellen subscription er der forskellige "tilmeldte til" entry for en
bruger (match på AID) på en day(s) (match på DID) på en bestemt bane
(match på TID).

Det jeg gerne vil, er at hente de "Tilmeldt til" entry ud for en given
bruger (et givent AID).
Dvs. man kigger i subscription for at se hvilke entry der findes med et
bestemt AID.
Dem henter man ud og dem man får ud, indeholder så DID og TID som man
henter entry for i hhv. days og tracks.

Håber det giver lidt mere mening :)

/Thomas

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste