Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mysql] tabel uit een veld van een tabel halen

Pagina: 1
Acties:

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik vroeg me af of het volgende mogelijk is.

Ik heb een tabel met daarin een aantal sections. Deze sections tabel heeft een veld type met als type enum. Hierin staan de mogelijkheden: 'info','shop','blog','articles'

Elk van deze mogelijkheden hebben een tabel met dezelfde naam als deze mogelijkheden.

Voor de duidelijkheid:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
sections
  id
  name
  etc..
  type ENUM[info,shop,blog,articles]
  websiteid

info
  id
  content
  etc ..
  sectionid

shop
  id
  content
  etc ..
  sectionid

blog
  id
  content
  etc..
  sectionid

articles
  id
  content
  etc..
  sectionid

Nu wil ik een query bouwen die aan de hand van het sectionid de inhoud ophaalt.

Zelf had ik iets als:

select s.name,@type:=s.type,t.content FROM sections s JOIN @type t ON (t.sectionid=s.id) WHERE s.websiteid=24

Nu blijkt dit niet te werken, ik vroeg me af of zoiet smogelijk is. Ik kan het altijd in 2 queries doen, maar 1 lijkt me mooier!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 25-11 13:54

Pyrus

Hardknock life

Je kunt beter je datamodel verbeteren, tenminste dat is wat zou zeggen aan de hand van het voorbeeld dat je geeft. Aangezien alle sections dezelfde kolommen hebben kun je er beter dit van maken:

code:
1
2
3
4
5
6
7
8
inhoud
  - id
  - sectionid
  - content

section
  - id
  - name


en dan kun je heel simpel dit doen:
SQL:
1
SELECT * FROM inhoud, section WHERE inhoud.sectionid = section.id AND section.name="blog"


Alhoewel dat laatste stukje (AND section.name....) er niet eens bijhoeft als je simpelweg de ID doorgeeft ipv 'blog' :)

Daarnaast is het op het moment nutteloos om sectionid in je tabel te zetten, aangezien je tabelnaam de section al bepaald en je daar dus geen id meer voor nodig hebt ;)

[ Voor 13% gewijzigd door Pyrus op 01-09-2007 12:54 ]

LinkedIn


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Je zou het met een left join kunnen doen, in combinatie met case statement.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
select
case when s.type = bron then
   bron.content
case when s.type = other then
   other.content
..
..
..
FROM sections
LEFT JOIN bron on
    bron.id = section.id 
LEFT JOIN other on
    other.id = section.id 

Programmer - an organism that turns coffee into software.