many to one

1 отговора 156 прегледа
#1

many to one

Не мога да измисля нещо на пръв поглед елементарно

table1:

name notes
-------- -----------
ivan
petar

table2:

name note
--------- -----------
ivan note 1
ivan note 2
petar note 3
petar note 4

Искам в първата таблица в notes да събера всички записи от втората за съответния човек, варианта е да обхождам първата и да добавям където съм намерил за съответното име във втората или обратното, ама нещо не става ]

Отговор
в отговор на refer #2

Re: Грешна идея.

Откажи се от колонката Notes в първата таблица!

Точно затова са Релационните БД за да не ти се налага да дублираш една и съща информация на различни места.

SELECT table1.name, table2.note FROM table1, table2 WHERE table1.name = table2.name;

... и получаваш точно това което искаш като резултат.

Ако в table1 нямаш други колонки откажи се и от нея.

Ако пък много държиш всички бележки за дадено име да се сглобяват като един цял низ ето ти едно решение за MySQL което обаче е силно нестандартно и не знам дали можеш да го намериш в друга СУБД

SELECT name, GROUP_CONCAT(note) FROM table2 GROUP BY name;

Пълният синтаксис на GROUP_CONCAT е:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])

Ако не си с MySQL пробвай със съхранена процедура.

salle.online.bg/sig
Отговор