Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.06.2016
Сообщений: 3

Как объединить в цикл и проверить на совпадение?

25.12.2016, 18:13. Показов 1375. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// подключаюсь к db и получаю все записи с переданным id
$connect = $db->query("SELECT * FROM `o_post` WHERE `id` = '$an_id'");
$get = $db->get_row($connect);
 
// далее создаю массив, для работы с ним в цикле
$categories = explode(',', $get['category']);
 
// здесь я вывожу все id, которые принадлежат посту
foreach ($categories as $id) {
  echo $id . '<br>';
}
 
// а здесь получаю все записи, которые имеют вторую категорию и вывожу рандомно не более пяти записей
$n = 2; // указал вручную, чтобы работало
$all = $db->query("SELECT * FROM `o_post` WHERE `category` LIKE  '%,$n,%' OR `category` LIKE '%,$n' OR `category` LIKE '$n,%' ORDER BY RAND() LIMIT 5");
$from = $db->get_row($all);
 
while ($from) {
  echo $from['title'] . '<br>';
  $from = $db->get_row($all);
}
Ранее я задавал вопрос на другом сайте:
Как с помощью цикла пройтись по полученному массиву и вывести из таблицы максимум 5 записей, у которых id поста равен присланному ($an_id) и в колонке category есть не менее двух совпадений по массиву (при этом необходимо учесть, что в таблице категории хранятся через запятую)?
Но на него никто не ответил, в итоге я сделал самостоятельно то, что удалось, но снова зашел в тупик.

Буду признателен за помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2016, 18:13
Ответы с готовыми решениями:

Как правильно и проще проверить два поля на совпадение
Как правильно и проще проверить два поля на совпадение Добавлено через 4 минуты этот код не воспринимает обработчик if ($id!=$id...

Php как проверить переменную на совпадение с элементами массива?
есть переменная $name. есть массив array('test1','test2','test3'); если переменная $name равна 'test2' например, то вернуть true, ...

Как можно проверить все символы строки на совпадение с определенным символом
Как можно проверить все символы строки на совпадение с определенным символом заданным заранее и если такое совпадение нашлось то изменить...

4
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.12.2016, 18:47
Схему таблицы o_post в виде sql дампа в студию
0
0 / 0 / 0
Регистрация: 01.06.2016
Сообщений: 3
25.12.2016, 18:58  [ТС]
https://cloud.mail.ru/public/8vDG/wiMTCTdA8
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.12.2016, 19:12
wagwandude, такой подход неверный. Для реализации отношения many-to-many вместо того, чтобы хранить категории в строке через запятую, нужно создать еще одну таблицу, допустим o_post_category с двумя столбцами (o_post_id, category_id). o_post_id является id из таблицы o_post, category_id - id из таблицы category (или как там она у тебя называется) Если пост с ид 8 относится к категориям с ид 2 и 7, то в таблице o_post_category будет 2 строки
8 2
8 7
тогда нужный тебе запрос будет выглядеть так:
PHP
1
2
3
4
5
6
7
// защита от sql инъекций
$categories = implode(',' ,array_map(function($e) {return (int)$e}, explode(',', $get['category'])));
$all = $db->query("SELECT p.* FROM o_post p
    JOIN o_post_category pc ON
        p.id = pc.o_post_id AND
        pc.category_id IN ($categories)
    GROUP BY p.id HAVING COUNT(1) > 1 LIMIT 5");
0
0 / 0 / 0
Регистрация: 01.06.2016
Сообщений: 3
25.12.2016, 19:24  [ТС]
Я это пониманию, но суть в том, что я использую движок DLE, там все реализовано именно таким способом.
Если исходить конкретно из проблемы, которую мне надо решить, как подойти к решению?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2016, 19:24
Помогаю со студенческими работами здесь

Как проверить столбик на совпадение данных, не зная, какие это будут данные?
На примере таблица, которую, как любую другую, требуется проверить по столбикам на соответствие данных в столбиках. Ведь, если, положим, на...

Как правильно объединить цикл?
Доброго времени суток! Как правильно объединить цикл? while (!(cin &gt;&gt; value_one_) || value_one_ &lt; 0 || value_one_) { cout...

Как объединить 2 операции в один цикл PHP
Нужно 1)выделить*жирным*шрифтом*людей,*имеющих*высшее*образование 2)закрасить*зеленым*фоном*строки*с*новичками*(стаж работы...

Проверить совпадение массивов
Как сделать, если даже один элемент массива не совпадает с другим, то тогда выводится Массивы не совпадаю, то у меня пишет, что первые...

Contains, проверить совпадение с несколькими символами
Есть некоторая строка, нужно узнать есть ли в ней спец. символы, к примеру: $#%^.. Просто проверить на один символ через Contains - не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru