FAQ на php и mysql

Russkoff

Новичок
Всем привет. Нужна ваша помощь

Хочу создать для посетителей сайта FAQ на php и Mysql.

БД уже есть (2 таблицы)

Таблица с категориям





Таблица в вопросами и ответами






Мой вопрос таков. Как вывести на одну страницу все категории и подними вопросы для них?




Заранее спасибо!
 

Фанат

oncle terrible
Команда форума
ну можно и с foreach. но тогда пагинацию будет трудно сделать.
поэтому всегда лучше с джойном

вообще делай как тебе удобнее
 

ksnk

прохожий
Нужно сначала макет нарисовать, в котором обозначить, что такое категории, сколько в них вложений (2, 3 или много). И соответственно с этим пристроить страничную пагинацию. Как будет располагаться весь faq, с точки зрения страниц - один длинный-длинный лист на все, просто порезаный на страницы или каждый большой раздел может быть нарезан на страницы отдельно?
Сколько примерно планируется вопросов ? 100 - 1000 - 10000 - больше ?
 

Russkoff

Новичок
Нужно сначала макет нарисовать, в котором обозначить, что такое категории, сколько в них вложений (2, 3 или много). И соответственно с этим пристроить страничную пагинацию. Как будет располагаться весь faq, с точки зрения страниц - один длинный-длинный лист на все, просто порезаный на страницы или каждый большой раздел может быть нарезан на страницы отдельно?
Сколько примерно планируется вопросов ? 100 - 1000 - 10000 - больше ?
Будет примерно 5 - 6 категорий, в каждой категории 5 - 7 вопросов и ответов, и всё на одной странице,

 

ksnk

прохожий
В этом случае (небольшое количество вопросов, один лист на все вопросы, по одной категории на вопрос, вывести данные можно одним sql запросом
Код:
select c.faqCategoryName, f.* from faqTable as f
left join faqCategory as c on c.faqCategoryId=f.faqCategoryId
order by faqCategoryName
Вывод на экран делается простым перебором всех полученных значений. Нужно только проверять когда faqCategoryName изменит свое значение - нужно вывести блок с заголовком - именем раздела.

Если количество вопросов будет превышать разумные для просмотра объемы - можно легко прикрутить пагинацию, добавив limit в конец запроса

Кстати - в таблицу категорий нужно добавить поле "сортировка", чтобы иметь возможность управлять порядком вывода вопросов-ответов на экран.
 

WMix

герр M:)ller
Партнер клуба
@ksnk, я разделил бы запрос на две части, один вытягивает категории, другой, все вопросы/ответы.
хотя в данном случае это не существенно.
1. на каждый вопрос/ответ из базы тянется группа что создает лишний трафик
2. категории и вопросы/ответы это разные сущности и смешивать их нельзя

Код:
select * from faqCategory limit x,y;

select f.*
from faqTable f
join faqCategory c on on c.faqCategoryId=f.faqCategoryId
where c.faqCategoryId in (id - категорий);
 

Фанат

oncle terrible
Команда форума
Нужно только проверять когда faqCategoryName изменит свое значение
на самом деле при использовании PDO можно просто получить вложенный массив и вывести через вложенный foreach. https://stackoverflow.com/a/41263854/285587

Но я бы ему предложил все сделать по порядку - сначала запросы в цикле, потом джойн с ифом, а потом уже два форича.
 
  • Like
Реакции: ksnk

ksnk

прохожий
@WMix, если абстрактно попридираться к неизвестным данным неизвестного проекта, то получится, что в пагинации, построенной на
select * from faqCategory limit x,y;
учитывается только количество категорий, а количество вопросов в каждой категории не учитывается. Понятно, что это вкусовщина, но в макете все вопросы открыты, так что количество вопросов, по идее, тоже должно бы иметь важное значение :)
 
Сверху