2015-02-24 3 views
1

Я получаю только одну строку элементов и соответствующие категории.LEFT JOIN - Сортировка и группа

$stmt = $conn->prepare("SELECT lt_category.id, lt_category.title, lt_category_elements.category_id, lt_category_elements.title as elementitle, lt_category_elements.text 

FROM lt_category 

LEFT JOIN lt_category_elements ON lt_category.id = lt_category_elements.category_id"); 

категории 1

  • element1 (есть)
  • элемент 2,3,4,5 (отсутствует) и т.д.

категории 2

  • element1 (есть)
  • элемент 2,3,4,5 (отсутствует) и т.д.

категории 3

  • element1 (есть)
  • элемент 2 3,4,5 (отсутствует) и т.д.

Вот моя структура таблицы:

+------------------------+ 
| lt_category_elements | 
+------------------------+ 
| id      | 
| category_id   | 
| title     | 
| text     | 
| rel_code    | 
| created    | 
+------------------------+ 

+------------------------+ 
| lt_category   | 
+------------------------+ 
| id      | 
| title     | 
| text     | 
| rel_code    | 
| created    | 
+------------------------+ 

Как получить недостающие элементы под одну категорию?

output

, но мне нужно: enter image description here

вот мой выходной код:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
        ?> 
         <div class="playerrow">  
          <span class="category"><?php echo $row['title']; ?></span> 
          <span class="category"><?php echo $row['text']; ?></span> 
         </div> 
        <?php } ?> 
+0

Можете ли вы показать свою структуру таблицы для обоих? – Ranjith

+0

Что-то вроде: 'RIGHT JOIN lt_category_elements ON lt_category.id = lt_category_elements.category_id WHERE lt_category_elements.id IS NULL' получит то, где элементы отсутствуют, но не там, где они не ... если это имеет смысл. – CD001

+0

Привет, Ранджит, конечно. :) Я добавил. – paul

ответ

2

Просто переключитесь таблицы осталось < -> правый:

SELECT lt_category.title, 
     lt_category_elements.category_id, 
     lt_category_elements.title as elementitle, 
     lt_category_elements.text 

FROM lt_category_elements 

LEFT JOIN lt_category 
ON lt_category.id = lt_category_elements.category_id 
ORDER BY lt_category_elements.category_id, lt_category_elements.id 

и здесь это ваш p hp:

$curCat = ''; 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    if ($curCat !== $row['category_id']) { 
     if ($curCat !== '') 
      echo '</div>'; 
     echo '<div class="playerrow">'; 
     echo '<span class="category">'.$row['title'].'</span>'; 
    } 
    echo '<span class="category">'.$row['text'].'</span>'; 
    $curCat = $row['category_id']; 
} 
if ($curCat !== '') 
    echo '</div>'; 
+0

, а затем его: категория 1 -> element2. категория 1 -> элемент2. но я хочу иметь категорию 1 -> element1 -> element2. категория 2 -> element1 -> element2 и т. д. – paul

+0

вы немного путаетесь :-) покажите ожидаемый результат в TABLE в своем посте, пожалуйста. Поэтому, если вы хотите объединить несколько полей - это одно. если вы хотите сгенерировать столько полей (5 * 3), поскольку у вас есть элементы в каждой категории - это другое. – Alex

+0

извините. :) Я добавил свой результат как фотографию в свой пост. – paul