FAQ на php и mysql

  • Автор темы Автор темы Russkoff
  • Дата начала Дата начала

Russkoff

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

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

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

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

23212476.png

23212477.png



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

23212478.png


23212479.png



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

23212480.png



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

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

Будет примерно 5 - 6 категорий, в каждой категории 5 - 7 вопросов и ответов, и всё на одной странице,

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

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

Кстати - в таблицу категорий нужно добавить поле "сортировка", чтобы иметь возможность управлять порядком вывода вопросов-ответов на экран.
 
@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 - категорий);
 
Нужно только проверять когда faqCategoryName изменит свое значение
на самом деле при использовании PDO можно просто получить вложенный массив и вывести через вложенный foreach. https://stackoverflow.com/a/41263854/285587

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