PHP: цикл по группированному массиву SQL-запросов, но выводить одно значение один раз для каждой «группировки»? - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть небольшой фрагмент кода, который я пытался обернуть вокруг себя несколько часов.

Я пытаюсь создать запрос, который извлекает некоторые элементы и в конце группирует их по селектору. Я попытаюсь продемонстрировать: я опрашиваю всех членов моей организации. Каждый член является членом «отдела», и в каждом отделе может быть несколько членов, но только один отдел для каждого члена.

Итак, я создал запрос для выбора всех членов моей организационной группы по отделам.

Когда я показываю его с помощью простого foreach($my_query as $q) …, я хочу вывести $q->department_name, но только один раз для этого отдела. Прямо сейчас он говорит «Маркетинг» для всех пяти членов, а затем он меняется на «HR» для всех этих членов. Я пробовал несколько различных методов, таких как array_unique, создавая функцию, которая проверяет строку, чтобы увидеть, является ли она такой же и другой, но без результата.

Я мог бы создать два цикла foreach, но если это вообще невозможно, я бы предпочел, потому что два цикла foreach повлияют на производительность.

Буду очень признателен за любую помощь или предложение.

Sinerely
- Местика

--- Отредактировано --- Кстати, мой запрос выглядит так:

SELECT * 
FROM wp_term_taxonomy AS cat_term_taxonomy
INNER JOIN wp_terms AS cat_terms ON cat_term_taxonomy.term_id = cat_terms.term_id
INNER JOIN wp_term_relationships AS cat_term_relationships ON cat_term_taxonomy.term_taxonomy_id = cat_term_relationships.term_taxonomy_id
INNER JOIN wp_posts AS cat_posts ON cat_term_relationships.object_id = cat_posts.ID
INNER JOIN wp_postmeta AS meta ON cat_posts.ID = meta.post_id
WHERE cat_posts.post_status =  'publish'
AND meta.meta_key =  'active'
AND meta.meta_value =  'active'
AND cat_posts.post_type =  'member'
AND cat_term_taxonomy.taxonomy =  'deparment'
GROUP BY cat_terms.slug, cat_term_relationships.object_id

1 Ответ

2 голосов
/ 21 ноября 2011
$prev_department = NULL;

foreach ($my_query AS $q)
{
  if ($prev_department != $q->department_name)
    echo '<h2>'. htmlentities($q->department_name, ENT_COMPAT, 'UTF-8') .'</h2>';

  // ...

  $prev_department = $q->department_name;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...