Мы добавляем теги к нашим новостным сообщениям (мы используем нашу собственную CMS), и я хотел бы выделить 5 связанных историй в зависимости от того, какие теги используются для отдельной истории. У нас есть теги в базе данных, разделенные пробелами, поэтому я использую этот код, чтобы получить теги в массив
$tags = explode(" ", $tags);
Теперь, когда у нас есть теги в массиве, я хочу использовать их, чтобы вытащить связанные истории из базы данных.
foreach($tags as $t) {
$pullRelated = mysql_query("SELECT * FROM `posts` WHERE `tags` LIKE '%$t%' AND `newsID` != '$newsID' LIMIT 5");
Проблема в том, что если есть 3 тега, в нем будут показаны 15 связанных историй (по 5 для каждого тега). Я бы хотел, если есть 2, 3, 4 или 5 тегов, покажите смесь историй из всех тегов, но все равно показывайте только 5 историй.
Совет
Таким образом, вы сохраняете теги (ключевые слова, категории) в виде строки с разделителями пробелов в таблице сообщений.
Не так много, что можно сказать об этом, за исключением того, что вам нужно нормализовать дизайн, который облегчит все ваши проблемы и сделает ваше приложение значительно более эффективным, судя по тому, что вы показали до сих пор.
Что-то вдоль этой строки должно быть достаточно:
Переписывание mysql позволяет сократить время и записать tmp на диск