Mysql Join, PHP

0

Как раз перед тем, как поставить строку кода, позвольте мне объяснить, чего я пытаюсь достичь.

Id нравится запрашивать таблицу, где определенная страница имеет определенный parent_id. После того, как у меня есть все результаты, я хотел бы взять идентификатор страницы, которая имеет этот конкретный parent_id, и получить все его относительные части страницы из другой таблицы.

Затем я просто хочу получить эту информацию в массиве, готовом к печати...

Любая помощь будет принята с благодарностью...

$q = $CONN->query("SELECT cms_page.id, cms_page.title, cms_page.slug, cms_page_part.* FROM cms_page LEFT JOIN cms_page_part ON cms_page_part.page_id=cms_page.id  WHERE cms_page.parent_id='8'");
  • 0
    что делает ваш пример кода в настоящее время? есть ошибка, или результаты как-то не так?
  • 0
    Кажется, он перечисляет четыре портфеля, которые у меня есть, но потом, кажется, повторяет их, возможно, из-за того, что части страницы добавляются из-за неправильного объединения?
Теги:

2 ответа

0

Не должно быть проблем с извлечением нескольких строк с учетом вашего текущего запроса:

$sql = "SELECT cms_page.id, cms_page.title, cms_page.slug, cms_page_part.* 
FROM cms_page 
LEFT JOIN cms_page_part ON (cms_page_part.page_id = cms_page.id)
WHERE cms_page.parent_id = '8'";

Вам нужно будет перебрать результат из mysql_query следующим образом:

$result = mysql_query($sql);
if ($result) {
    // keep track of number of portfolio items
    $i = 1;
    // iterate over rows
    while($row = mysql_fetch_assoc($result)) {
        // output data to page for each row
        echo 'Portfolio item ' . $i;
        echo 'Title: ' . $row['title'] . '<br />';
        echo 'Slub: ' . $row['slug'] . '<br /><br />';
    }
}
  • 0
    это $ row ['page_part'], что немного сложнее ... Вот в основном то, что нравится иметь возможность печатать ...
0

Можете ли вы опубликовать результаты своего запроса? Насколько я вижу, ваш оператор select должен делать трюк, повторяя поля cms_page.id и т.д. Для каждой соответствующей части.

См. также http://www.w3schools.com/Sql/sql_join_left.asp

Это (надеюсь) должно решить ваш вопрос $row ['page_part']:

$rows = array();
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
while ($row) {
  $rows[$row['title']][] = $row; // or select only the fields that you need
  $row = mysql_fetch_assoc($result);
}

foreach($rows as $portfolio => $parts) {
  // adjust for actual html rendering
  echo '<pre>';
  print_r($portfolio);
  echo "\n";
  $count = 0;
  foreach($parts as $part) {
    echo ++$count . ' - ' . $part['cms_page_part_field1'] . ' - ' . $part['cms_page_part_field2'] . "\n";
  }
  echo '</pre>';
}
  • 0
    ldmgardendesign.com/portfolio.html
  • 0
    Я хотел бы, чтобы части страницы как набор результатов одного из четырех портфелей не возвращались как отдельные результаты. Таким образом, у вас есть одно портфолио, а затем связанные части страницы в виде одной строки.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню