2016-01-11 3 views
0

У меня есть две таблицы базы данных со структурой следующим образом:Извлечение вложенной карты сайта CMS - SQL-запрос?

page_info

  • page_id (интермедиат)
  • parent_page_id (интермедиат)
  • page_title (VARCHAR)

page_order

  • page_order_id (интермедиат)
  • parent_page_id (интермедиат)
  • page_id (интермедиат)
  • page_order (интермедиат)

(FYI стол page_info был сильно вырублены от того, что на самом деле там, это единственные поля, которые здесь играют.)

Есть ли способ вытащить всю вложенную структуру в плоскую структуру в правильном порядке с одним, rel быстро быстрый SQL-запрос?

Фактическая проблема, которую я пытаюсь решить, - это текущая реализация, которую мы имеем, слишком медленна и слишком тесно связана с нашей CMS. В настоящее время тяжелая, уродливая рекурсивная PHP-функция используется для создания данных, и это вызывает узкие места в нашем приложении, поэтому, возможно, SQL-запрос, чтобы ускорить его, не обязательно является решением, но я бы хотел, однако, видеть мысли людей.

+0

MySQL не может вернуть вложенные наборы результатов. Вы запрашиваете базу данных, вы получаете некоторые результаты. Если ваш PHP-скрипт, создающий карту сайта, медленный, подумайте о том, чтобы выполнить его в очереди, а затем кешировать результат. –

+0

Хорошо известно о том, что «MySQL не может возвращать вложенные результирующие наборы». Я должен был быть более ясным в этом случае - мне нужен результирующий набор в плоской структуре. – davo0105

+0

Это то, что вы хотите? http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query –

ответ

0

Ниже запроса будет возвращен набор всех страниц, а затем с помощью php вы можете его использовать.

SELECT page_info.page_id AS page_id, parent_page_id, page_title, page_order_id, parent_page_id, page_order 
    FROM page_info INNER JOIN page_order 
    ON page_info.page_id = page_order.page_id 

Здесь вам понадобится вложенный цикл, чтобы прочитать его.

[Примечание: Если это не связано на ваш вопрос, то дайте мне знать]

Смежные вопросы