Тема появилась отсюда viewtopic.php?f=13&t=53575 вопрос такой, например есть таблица с тегами (tag_id, tag_name) и мне надо в другой таблице в столбце posts_tag сохранить все tag_id данной записи, что типа: что бы потом осуществляя выборку я мог получить все записи в которых присутствую теги 5, 12, 33 Вопрос может есть какой то тип данных или как лучше организовать хранение подобного, меня бы устроили именно числовые записи. Так же меня интересует решение этой задачи в MySQL, без всяких дополнений (типа сфинкса, там то я знаю что можно это решить), конкретной задачи сейчас нет, просто стало интересно исходя из ответа
Re: Последовательность значений (что то типа массива) в стол Ты связь многие-ко-многим сделать хочешь, или что это?
Re: Последовательность значений (что то типа массива) в стол Не надо так хранить теги, на первой же выборке будет ой )
Re: Последовательность значений (что то типа массива) в стол ну виде обычной строки конечно не надо, оно вроде как и не будет искать даже (я как то делал и там искал через FULLTEXT, там пришлось id с 1000 начинать, т.к. поиск не осуществляется если меньше 4-х символов), вот может есть какой то способ хранения подобного, набора (последовательности) данных. Добавлено спустя 1 минуту 40 секунд: Re: Последовательность значений (что то типа массива) в столбце не совсем понимаю о чем речь, я знаком с таким схемой хранения тегов (и не только) как с WP (3 таблицы, tags, posts и связи между ними) но если осуществлять поиск по тегам, это очень накладно.
Re: Последовательность значений (что то типа массива) в стол Что значит накладно? У тебя должно быть три таблицы: 1. posts - id, title, text 2. tags - id, title 3. post_tag - post_id, tag_id Берешь тег, получаешь id постов и выводишь.
Re: Последовательность значений (что то типа массива) в стол У меня есть три таблицы posts (нас в ней интересует только post_id) tags (нас в ней интересует только tag_id) и term_relationships, которая состоит из id, post_id и tag_id. Мы ищем по интересующие нас записи (из таблицы posts) по тегам причем меня интересуют записи где все эти теги присутствуют, т.е. я делаю выборку из tags, получаю интересующие меня tag_id (например 3, 5, 9) и потом я получаю все записи из таблицы term_relationships в которых столбец tag_id равен 3, 5 или 9, полученные результат, допустим 100 000 записей я уже в РНР перебираю, откидываю те записи где не все 3 тега встречаются, как то так. как я уже написал 100 000 записей + все это еще перебрать надо, это и есть накладность. Добавлено спустя 8 минут 15 секунд: Re: Последовательность значений (что то типа массива) в столбце таблица term_relationships выглядит так: Код (Text): id | post_id | tag_id 1 | 1 | 3 2 | 1 | 5 3 | 1 | 9 4 | 2 | 3 5 | 2 | 9
Re: Последовательность значений (что то типа массива) в стол А почему ты решил что это много? Нормально настроенная БД спокойно переживет и в 10 раз больше, к тому же ни кто не отменял кэширование. Вот пых, да, сожрет всю доступную оперативку ) http://sqlfiddle.com/#!9/6b9f4/1 - мб так?
Re: Последовательность значений (что то типа массива) в стол Возможно топикстартер на подсознании помнит, что аналогичная тема поднималась и я подсказал одному реально толковому товарищу, что имеет смысл хранить теги в строке и есть прецеденты в авторитетных источниках. НО! Есть очень важное замечание: это поле не используется для навигации, в нем только хранится контент для отображения. Потому что когда мы выводим список постов, нам не хочется джойнить к нему таблицу-связку и таблицу тегов только ради получения строк с именами тегов. Мы можем хранить эти названия прямо в посте! А вот когда нам понадобится поиск по тегу, тогда мы применим многие ко многим через таблицу-связку. Это трюк. В нем возникает потребность только на реально больших числах. Не надо преждевременной оптимизации!
Re: Последовательность значений (что то типа массива) в стол уже немного теплее, но не решает проблему, помнится полгода назад у меня была такая проблема, мне надо было организовать поиск по тегам, причем достаточно расширенный поиск, т.е.: - я мог выбрать, теги (или тег) должны быть обязательно, желательно и тега не должно быть (не должно быть это так, для формы, оно не использовалось) - по мимо это, я еще должен был мочь писать такую штуку в обязательных тегах, что обязательно должен быть тег А или тег Б (если нет ни А ни Б значит мимо, если есть или А или Б значит подходит). Записей было много (БД занимала 200 - 500 мб.) (записи - ссылки), сначала я сделал 3 таблицы как у WP (ну или как я приводил выше), тормозило, парой выходил лимит времени, так же была проблема с тем, что я не мог сделать что бы выводилось постранично. Потом я все переделал, избавился от таблицы связей, а теги перенес в отдельный столбец, в столбец этот я записывал id тегов из таблицы tags, как я уже говорил сделал так, что бы они начинались с 1000, и записывал так: Код (Text): ,1000,1001,5467, а поиск делал при помощи FULLTEXT (а может и нет, уже точно не помню возможно через WHERE LIKE), выполняться стало быстрее, получилось сделать постраничный вывод, но все равно это было не то. Сейчас надобности как то нет, но вот интерес как можно было это реализовать правильно только средствами MySQL остался. Добавлено спустя 4 минуты 8 секунд: Re: Последовательность значений (что то типа массива) в столбце единственное я тогда не знал о HAVING, только сейчас узнал.