Kom ihåg mig?
Home Menu

Menu


Hämta två rader från samma tabell SQL

 
Ämnesverktyg Visningsalternativ
Oläst 2014-01-09, 22:13 #1
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Standard Hämta två rader från samma tabell SQL

Har två tabeller, företag och oppettider.

Tabellen oppettider har 7 rader, en för varje veckodag. Det jag skulle vilja göra är att hämta 2 dagar (dagens samt gårdagens) från tabellen öppettider i samma query som jag hämtar företag.

Kommer dock inte på någon vettig lösning. Någon som vill bolla lite och komma på något smart?


företag
id | namn

oppettider
id | dag | foretag | open | close

Där dag kan vara "mon", "tue", "wed", "thu" etc.
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:32 #2
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Om jag inte missuppfattat något så är det väl bara att köra något sånt här:

Kod:
SELECT * FROM foretag AS f
JOIN oppettider AS o ON o.foretag = f.id
WHERE f.id = {företagsid}
AND o.dag IN ('mon', 'tue')
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:36 #3
HenrikAI HenrikAI är inte uppkopplad
Flitig postare
 
Reg.datum: Nov 2004
Inlägg: 331
HenrikAI HenrikAI är inte uppkopplad
Flitig postare
 
Reg.datum: Nov 2004
Inlägg: 331
Hoppas jag inte missförstod dig nu, men du kan göra en join på samma tabell flera gånger.

Typ så här (med reservation för fel):

Kod:
SELECT foretag.id, foretag.name, idag.open, idag.close, igår.open, igår.close
FROM foretag
INNER JOIN oppettider AS idag ON (idag.foretag = foretag.id AND idag.dag = ...)
INNER JOIN oppettider AS igår ON (igår.foretag = foretag.id AND igår.dag = ...)
WHERE foretag.id = ...

Senast redigerad av HenrikAI den 2014-01-09 klockan 22:39
HenrikAI är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:42 #4
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Citat:
Ursprungligen postat av tartareandesire Visa inlägg
Om jag inte missuppfattat något så är det väl bara att köra något sånt här:

Kod:
SELECT * FROM foretag AS f
JOIN oppettider AS o ON o.foretag = f.id
WHERE f.id = {företagsid}
AND o.dag IN ('mon', 'tue')
Returnerar bara 1 record från öppettider-tabeller, den första (vilket är mon i detta fall)
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:45 #5
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Citat:
Ursprungligen postat av HenrikAI Visa inlägg
Hoppas jag inte missförstod dig nu, men du kan göra en join på samma tabell flera gånger.

Typ så här (med reservation för fel):

Kod:
SELECT foretag.id, foretag.name, idag.open, idag.close, igår.open, igår.close
FROM foretag
INNER JOIN oppettider AS idag ON (idag.foretag = foretag.id AND idag.dag = ...)
INNER JOIN oppettider AS igår ON (igår.foretag = foretag.id AND igår.dag = ...)
WHERE foretag.id = ...
Ser ju ut som det borde fungera, men returnerar enbart open/close för gårdagen (den första "matchningen" dvs)
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:46 #6
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
oppettider-tabellen ser ut såhär (företagsid 10)

id | foretag | dag | open | close

Citat:
1 - 10 - mon - 08:00 - 16:00
2 - 10 - tue - 08:00 - 16:00
3 - 10 - wed - 08:00 - 16:00
4 - 10 - thu - 08:00 - 16:00
5 - 10 - fri - 08:00 - 16:00
6 - 10 - sat - 08:00 - 16:00
7 - 10 - sun - 08:00 - 16:00
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:48 #7
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av yakuzaemme Visa inlägg
Returnerar bara 1 record från öppettider-tabeller, den första (vilket är mon i detta fall)
Fungerar utmärkt för mig, gjorde ett par små testtabeller och får två rader som resultat precis som väntat. Henriks exempel ovan med dubbla joins är onödigt tillkrånglat. Känns som att du gör något annat galet Ställer du frågan direkt mot databasen eller kollar du kodresultat?
__________________
Full-stack developer, free for smaller assignments

Senast redigerad av tartareandesire den 2014-01-09 klockan 22:50
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:51 #8
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Citat:
Ursprungligen postat av tartareandesire Visa inlägg
Fungerar utmärkt för mig, gjorde ett par små testtabeller och får två rader som resultat precis som väntat. Henriks exempel ovan med dubbla joins är onödigt tillkrånglat. Känns som att du gör något annat galet Ställer du frågan direkt mot databasen eller kollar du kodresultat?
Såg din edit nu. Kollar kodresultat, och den returnerar ju två objekt (dvs. hela företagsobjektet + öppettider för måndag, och sedan hela företagsobjektet + öppettider för tisdag). Går det att baka in både måndag och tisdag i samma?

Senast redigerad av yakuzaemme den 2014-01-09 klockan 22:54
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:55 #9
HenrikAI HenrikAI är inte uppkopplad
Flitig postare
 
Reg.datum: Nov 2004
Inlägg: 331
HenrikAI HenrikAI är inte uppkopplad
Flitig postare
 
Reg.datum: Nov 2004
Inlägg: 331
Citat:
Ursprungligen postat av yakuzaemme Visa inlägg
Såg din edit nu. Kollar kodresultat, och den returnerar ju två objekt (dvs. hela företagsobjektet + öppettider för måndag, och sedan hela företagsobjektet + öppettider för tisdag). Går det att baka in både måndag och tisdag i samma?
Hyfsat säker på att min ska fungera..

Kod:
CREATE TABLE IF NOT EXISTS `foretag` (
  `id` int(11) NOT NULL,
  `name` varchar(256) NOT NULL
);

INSERT INTO `foretag` (`id`, `name`) VALUES
(1, 'test');
Kod:
CREATE TABLE IF NOT EXISTS `oppettider` (
  `id` int(11) NOT NULL,
  `foretag` int(11) NOT NULL,
  `dag` varchar(3) NOT NULL,
  `open` int(11) NOT NULL,
  `close` int(11) NOT NULL
);

INSERT INTO `oppettider` (`id`, `foretag`, `dag`, `open`, `close`) VALUES
(1, 1, 'tue', 10, 16),
(2, 1, 'mon', 11, 15);
Kod:
SELECT foretag.id, foretag.name, idag.open, idag.close, igår.open, igår.close
FROM foretag
INNER JOIN oppettider AS idag ON ( idag.foretag = foretag.id AND idag.dag =  'tue' ) 
INNER JOIN oppettider AS igår ON ( igår.foretag = foretag.id AND igår.dag =  'mon' ) 
WHERE foretag.id =1
Kod:
id | name | open | close | open | close
1 | test | 10 | 16 | 11 | 15
EDIT: Ändra till idag.open AS a, idag.close AS b, igår.open AS c, igår.open AS d så ser du att det fungerar i din kod. mysql_fetch_assoc kan inte hantera att du plockar ut flera kolumner med samma namn.

Senast redigerad av HenrikAI den 2014-01-09 klockan 23:04
HenrikAI är inte uppkopplad   Svara med citatSvara med citat
Oläst 2014-01-09, 22:57 #10
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av yakuzaemme Visa inlägg
Såg din edit nu. Kollar kodresultat, och den returnerar ju två objekt (dvs. hela företagsobjektet + öppettider för måndag, och sedan hela företagsobjektet + öppettider för tisdag). Går det att baka in både måndag och tisdag i samma?
Alltså, du får två rader som resultat vilket du också ska få. Huruvida du sedan gör två objekt eller inte beror helt på din kodstruktur, det har inget med databasfrågan att göra.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 09:24.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017