Запазване на тагове в базата данни

vinsbg

Registered
Здравейте,
какъв според вас е най-добрия начин за запазване на тагове в базата данни. Целта е при всеки ъплоуд на снимка да може да се добавят тагове към нея, а след това да се ползват в търсачката и извеждане на всички снимки, който имат съответния таг.

В същата таблица в която са снимките или в отделна таблица?

Таблицата е в този вид в момента:
Код:
mysql> describe images;
+--------------+
| Field           |
+--------------+
| id                |
| caption       |
| name         |
| size            |
| type           |
| file_path     |
| alt               |
| title             |
| img_category |
+--------------+
10 rows in set (0.01 sec)
В момента търсачката търси в 'caption', но искам освен това да добавя и тагове в които да търси.
 
Най-добре си направи нова таблица за таговете, според мен така ще е по чисто, инак ще трябва да си играеш с филтрации и глупости ако ги набуташ в 1 поле в таблицата на снимките .. ама както си решиш де .. :idea: :?:
 
djman каза:
таблица с тагове
таблица с връзка между 1 таг и 1 пост :)
Или иначе казано предлагаш да имам 3 таблици?
1. За снимките, която имам и сега.
2. За таговете.
3. За връзката между таблицата за тагове и таблицата със снимките.

Как може да изглежда една SQL заявка в такъв случай, за да показвам снимката + таговете към нея + категорията?

Поне от каквото успях да намеря в гугъл и аз останах с впечатление, че ще е по-добре да са в отделна таблица, но не ми е ясно как ще стане заявката с тези 3 таблици.

edit:
И още един въпрос ми изникна- как, докато качвам снимката да записвам в двете таблици -> в тази за снимката и в тази за таговете?
 
vinsbg каза:
djman каза:
таблица с тагове
таблица с връзка между 1 таг и 1 пост :)
Или иначе казано предлагаш да имам 3 таблици?
1. За снимките, която имам и сега.
2. За таговете.
3. За връзката между таблицата за тагове и таблицата със снимките.

Как може да изглежда една SQL заявка в такъв случай, за да показвам снимката + таговете към нея + категорията?

Поне от каквото успях да намеря в гугъл и аз останах с впечатление, че ще е по-добре да са в отделна таблица, но не ми е ясно как ще стане заявката с тези 3 таблици.

edit:
И още един въпрос ми изникна- как, докато качвам снимката да записвам в двете таблици -> в тази за снимката и в тази за таговете?

3. За връзката между таблицата за тагове и таблицата със снимките. - Такава таблица не мисля че ще ти е нужна

А втората таблица може да изглежда така:
id, id_img, tag

Как може да изглежда една SQL заявка в такъв случай, за да показвам снимката + таговете към нея + категорията? - Една заявка от този сорт:

PHP:
SELECT * FROM table_image as a, table_tag as b, table_category as c WHERE a.id=$id AND a.id=b.id_img AND a.cat=c.cat_id

И още един въпрос ми изникна- как, докато качвам снимката да записвам в двете таблици -> в тази за снимката и в тази за таговете? - просто пускаш още една заявка веднага след първата , ето пример:

PHP:
if(isset($_POST['submit']))
		{ 
 if(move_uploaded_file ($tmppath, 'images/'.$name))
        {			   
        $queryimg=mysql_query("INSERT INTO table_img (`col1`, `col2`)
        VALUES
        ('$1', '$2')")

	$querytag=mysql_query("INSERT INTO table_tag (`col1`, `col2`)
        VALUES ('$1', '$2')") ;
        }
		}
 
Msecurity, заявката не е ли по-добре да е с left join?
SELECT * FROM table_image as a, table_tag as b, table_category as c WHERE a.id=$id AND a.id=b.id_img AND a.cat=c.cat_id
да бъде

SELECT * FROM table_image as a,
left join table_tag as b on (a.id=b.id_img)
left join table_category as c on (a.cat=c.cat_id)
WHERE a.id=$id
 
anonimen каза:
Msecurity, заявката не е ли по-добре да е с left join?
SELECT * FROM table_image as a, table_tag as b, table_category as c WHERE a.id=$id AND a.id=b.id_img AND a.cat=c.cat_id
да бъде

SELECT * FROM table_image as a,
left join table_tag as b on (a.id=b.id_img)
left join table_category as c on (a.cat=c.cat_id)
WHERE a.id=$id

Може и по добре да е, но за мен това е по лесният вариант.
А и не ми е ясно дали има някаква разлика при изпълнението?
ПП: ще съм ти благодарен ако ми обясниш каква е разликата , преди използвах left join, но много дълго ми се стуваше ...
 
Msecurity каза:
Може и по добре да е, но за мен това е по лесният вариант.
А и не ми е ясно дали има някаква разлика при изпълнението?
ПП: ще съм ти благодарен ако ми обясниш каква е разликата , преди използвах left join, но много дълго ми се стуваше ...
И на мен ми отне доста време да разбера що е то left join (и защо да не използвам обикновен селект - да разделям таблиците със запетайки). Дори и търсене в гугъл не помогна.

Но все пак имам едно предположение - представи си две таблици - koli и colours. Всяка кола има един цвят, на всеки цвят отговаря една кола.

Код:
koli
id | name
1 | kolabqla
2 | kolacherna

colours
id | cwqt | kola_id
1 | bql | 1
2 | cheren | 2

И сега една такава заявка ще работи перфектно:

[sql]select koli.name, colours.cwqt from koli, colours where koli.id = colours.kola_id[/sql]

Но какво ще стане, ако разбъркаме записите в colours? Ако белият цвят получи id 2, а черният - 1?

Код:
colours
id | cwqt | kola_id
1 | cheren | 1
2 | bql | 2

И сега ако изпълним
[sql]select koli.id, koli.name, colours.cwqt, colours.kola_id from koli, colours[/sql]

ще получим това:

Код:
id | name | cwqt | kola_id
1 | kolabqla | cheren | 2
2 | kolacherna | bql | 1

И ако сложим и where, както по-горе, няма да получим нищо. Защо? Защото никъде двете ид-та не съвпадат.
А сега ако изпълним
[sql]select koli.name from koli left join colours on koli.id=colours.koli_id[/sql]
ще получим желания резултат.
 
Благодаря ви. Ще пробвам при първа възможност и ще пиша какво се случва :?:
 

Back
Горе