many to one
1 отговора
156 прегледа
many to one
Не мога да измисля нещо на пръв поглед елементарно
table1:
name notes
-------- -----------
ivan
petar
table2:
name note
--------- -----------
ivan note 1
ivan note 2
petar note 3
petar note 4
Искам в първата таблица в notes да събера всички записи от втората за съответния човек, варианта е да обхождам първата и да добавям където съм намерил за съответното име във втората или обратното, ама нещо не става ]
table1:
name notes
-------- -----------
ivan
petar
table2:
name note
--------- -----------
ivan note 1
ivan note 2
petar note 3
petar note 4
Искам в първата таблица в notes да събера всички записи от втората за съответния човек, варианта е да обхождам първата и да добавям където съм намерил за съответното име във втората или обратното, ама нещо не става ]
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
Точно затова са Релационните БД за да не ти се налага да дублираш една и съща информация на различни места.
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