Таблица с фактическа структура на данните

Имам малко информация за филми в база данни, опростено изглежда така:

table movie
-----------
id     title
1234   batman
4456   spiderman


table movie_info
-----------------
id    movie_id   info_type_id    info
1     1234       1               USA
2     1234       1               Canada
3     1234       2               Action
3     1234       2               Drama
4     4456       1               France


table info_type
---------------
id   info_type
1    country
2    genre

Това, което се опитвам да направя, е да създам карта, показваща къде са създадени филмите и след това да се опитам да ги филтрирам по жанр. Частта за картографиране работи, но когато филтрирам по жанр, тя показва всички филми само когато задам жанр на Null като филтър..

Вече опитах много неща с изчислени полета и присъединяване на източника на данни с персонализиран SQL към себе си на movie_id, но нищо не изглежда да работи. Ще съм благодарен, ако някой може да ме насочи в правилната посока за справяне с този проблем.

Изчислени полета: Държава на производство:

IF[info_type_id]=8
THEN [info]
END

жанр:

IF[info_type_id]=3
THEN [info]
END

Персонализиран SQL (за жанрове):

SELECT movie_id, info AS genre
FROM movie_info
WHERE info_type_id=3

person JochenDB    schedule 06.05.2014    source източник
comment
Можете ли да публикувате някакъв код, който се опитва...   -  person Imran Ali Khan    schedule 06.05.2014
comment
Добавих малко информация. Това е доста елементарно, нов съм в това.   -  person JochenDB    schedule 06.05.2014
comment
Изчисляваните полета Държава на производство и Жанр работят добре, когато се използват поотделно, но не заедно.   -  person JochenDB    schedule 06.05.2014


Отговори (1)


Първо: Това е повече коментар, отколкото отговор, но оформлението на таблицата ви е нелогично.

Полето ID традиционно е уникален идентификатор. Вместо това го използвате, за да дублирате вашия info_type. Мисля, че е правописна грешка, освен че използвате цифровата стойност в секцията с псевдо код като info_type_id.

Ако искате да свържете числова стойност, имайте отделна справочна таблица, така че:

Таблица Информация_тип

id name
1 country
3 genre

И бихте го асоциирали по същия начин, както направихте movie_id, така че info_type ще бъде 2 или 1, а не текстова стойност

Що се отнася до вашия филтър, без код, предполагам какво правите, но нека кодът следва този модел:

If [filter] == "ALL"
  return all entries with an info_type of genre (whether you get them from an array or querying the DB (Select * from movie_info where info_type="genre"))
Else
  return all entries with the info value of [filter] (whether you get them from an array or querying the DB (Select * from movie_info where info_type="genre" and info="[filter]"))

Разликата между двете действия е, че all действа върху стойността info_type, докато другото действа върху стойността info. Логиката следва същата, независимо дали циклирате/избирате от масив или базата данни.

person Margaret    schedule 06.05.2014
comment
Структурата на данните наистина беше както я описахте с info_type в отделна таблица. Мислех, че така е по-разбираемо, но редактирах публикацията, за да я направя по-логична. - person JochenDB; 07.05.2014