Переписать грамотно запрос

Mick_20

Новичок
Помогите переписать запрос!
Вот его суть:

Из table1 я беру значения ID и NAME. Записываю их в массивы чз форич.

Прокручиваю в FOR эти массивы и записываю в переменные:
{
$id = $ids[$i];
$name= $names[$i];


Тут же делаю подзапрос к table2.
Запрос использует текущее значение $id.
Достаю массив из поля DOCS.
Перебираю массив DOCS в FOR
Аккумулирую массив документов пользователя с текущbм $id:
$docs .= "значение массива DOCS<br>";

Тут же аккумулирую список:
$aaa .= "ID={$id} NAME={$name} Документы пользоватля: {$docs}";

}
 

Фанат

oncle terrible
Команда форума
мне сейчас особо некогда
попробуй освоить JOIN

когда получишь свои данные в консоли, с повторениями, начинай осваивать group_concat
 

Mick_20

Новичок
В джойнах не нашел того что мне нужно.
Вот что мне нужно короче.

123123123.JPG
 

Semen

Семён
Покажи твой пример с join что выводит, если конечно ты его сделал.
 

Mick_20

Новичок
Мой пример из первого поста выводит первого пользователя и его материалы а др пользователей не выводит.
Короче говоря я же прокручиваю массив id из первой талицы - так вот он делает подзапрос только для первого из этих id.
 

Semen

Семён
Пример запроса с join покажи, подсказываю
PHP:
SELECT *
  FROM a LEFT JOIN b ON ...
 

Mick_20

Новичок
PHP:
$query = "SELECT name FROM
				  y1alq_soin_actions_docs
				  INNER JOIN
				  y1alq_soin_action_members
					ON y1alq_soin_actions_docs.member_id = y1alq_soin_action_members.Id 
					AND y1alq_soin_action_members.content_id = {$content_id}";
				$db->setQuery( $query );
				$db->query();
				$data = $db->loadObjectList();
Выводит все названия документов всех пользователей в один столбик
 

Фанат

oncle terrible
Команда форума
эм. а в чем смысл этого джойна? если ты выбираешь одни названия документов, то почему не обратиться напрямую к таблице документов безо всякого джойна?
 

Mick_20

Новичок
Мне нужны документы пользователей которые в таблице members имеют content_id=$content_id
 

~WR~

Новичок
PHP:
SELECT a.id, a.name, group_concat(b.docs)
FROM table1 a
    LEFT JOIN table2 b ON (a.id=b.user_id)
GROUP BY a.id, a.name
Вот это нужно?
 

Фанат

oncle terrible
Команда форума
Мне нужны документы пользователей которые в таблице members имеют content_id=$content_id
Ты вопрос-то свой помнишь?
Они тебе нужны не сами по себе, а в связке с пользователями.
так чего ж ты пользователей-то не выбираешь?
Одни джойны, без здравого смысла, тебе не помогут. самому тоже надо думать немножко
 

Semen

Семён
ну вот пришёл и всё написал, а мы хотели чтобы он сам до этого дошёл...
 

Mick_20

Новичок
Короче вопрос закрыт. Пошел долго и мучительно думать.
Запрос ~WR~ вроде правильный только я его по человечески применить не могу.
 

~WR~

Новичок
Я group by забыл) Обновил пост выше, попробуй новый запрос.
 

Mick_20

Новичок
Блин почти сделал. Вот выводит все что нужно, НО!!!
asdasd.JPG

На картинке подчеркнул! Нужно чтобы материалы у которых member_id одинаковый выводились в одной строке таблицы. А то так дублируется участник столько раз сколько у него документов.

Вот мой код:
PHP:
$query = $db->getQuery(true);
$query = "SELECT member_id, name, y1alq_soin_actions_docs.id
				
FROM y1alq_soin_action_members JOIN y1alq_soin_actions_docs 
ON y1alq_soin_action_members.id=y1alq_soin_actions_docs.member_id
WHERE content_id={$content_id}";
$db->setQuery( $query );
$db->query();
$data = $db->loadObjectList();
				
	foreach ($data as $var) 
	{
	$ids2[] = $var->id;
	$names[] = $var->name;	
	$member_ids[] = $var->member_id;	
	}
				for ($i=0; $i < count($names); $i++) 
				{
				$id2 = $ids2[$i];
				$idd = $member_ids[$i];
				$doc_name = $names[$i];

                            $aaa .= "{$id2}_{$idd }_{$doc_name }"; //аккумулирую
                                  }

echo $aaa;
 

Фанат

oncle terrible
Команда форума
как это сделать, я тебе написал самым первым ответом
плюс тебе и готовый код написали
 
Сверху