Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: как сделать запрос в две таблицы
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » как сделать запрос в две таблицы

Страниц (1): [1]
 

1. MadMike - 26 Сентября, 2012 - 20:27:32 - перейти к сообщению
Помогите сделать запрос.

У меня есть две таблицы:
В одной - h1vu5_comprofiler есть столбец "cb_actions" в котором хранятся названия материалов отмеченных пользователем.
Вторая таблица - материалы - h1vu5_content.

Мне нужно вывести те материалы у которых значение title совпадают со значениями первой таблицы столбца cb_actions .
Короче вывести материалы выбранные пользователем в поле cb_actions...
2. Tox - 26 Сентября, 2012 - 20:30:50 - перейти к сообщению
Читайте маны. это все есть в сети.
3. Okula - 26 Сентября, 2012 - 20:32:52 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT a.*, b.* FROM `h1vu5_comprofiler` AS a
  2. LEFT OUTER JOIN `h1vu5_content` AS b
  3. ON a.`cb_actions`=b.`title`
4. MadMike - 26 Сентября, 2012 - 20:41:06 - перейти к сообщению
Пробовал вот так :
SELECT *
FROM h1vu5_content,h1vu5_comprofiler
WHERE h1vu5_content.title LIKE h1vu5_comprofiler.cb_actions
Работает но ничего не выводит


А запрос Okula не понятен мне. Пишет Not data base selected
5. biperch - 27 Сентября, 2012 - 16:17:49 - перейти к сообщению
запрос Okula правильный, и ваш тоже имеет право на жизнь, но в вашем я бы LIKE заменил на =
проверьте есть ли там соответствия по которым вы связываете таблицы
6. MadMike - 27 Сентября, 2012 - 17:52:50 - перейти к сообщению
В общем вот к чему я пришел и застрял!

CODE (SQL):
скопировать код в буфер обмена
  1. $query2 = $db->getQuery(true);
  2. $query2->select('cb_actions');
  3. $query2->from('#__comprofiler');
  4. $query2->where("user_id = {$userid}");
  5. $db->setQuery($query2);
  6. $cb_actions = $db->loadResult();
  7. $cb_actions = explode('|*|', $cb_actions);
//разбили на массив строк, получили титлы мероприятий пользователя


//-----------запрос №3---------------//
CODE (SQL):
скопировать код в буфер обмена
  1. $query = $db->getQuery(true);
  2. $query->select('*');
  3. $query->from('#__content');
  4. $query->where('catid = 8');
//вывел титлы всех мероприятий


Титлы типо такого: КОНКУРС УЧЕНИЧЕСКИХ РАБОТ «ЛАБИРИНТЫ ЗНАНИЙ»

Вот теперь как сравнить их адекватно чтобы вывести с таблицы материалов титлы только тех которые в др таблице имеются?
7. Okula - 27 Сентября, 2012 - 18:42:20 - перейти к сообщению
MadMike пишет:
А запрос Okula не понятен мне. Пишет Not data base selected

Значит неправильно использовал его.
8. biperch - 27 Сентября, 2012 - 20:16:28 - перейти к сообщению
Okula пишет:
MadMike пишет:
А запрос Okula не понятен мне. Пишет Not data base selected

Значит неправильно использовал его.

верно подмечено запрос написан правильно, его только нужно правильно использовать в вашем фреймворке или через то что у вас
9. MadMike - 28 Сентября, 2012 - 06:36:42 - перейти к сообщению
Я не понимаю запрос Акулы. Помогите мой добить.



материалы в столбце cb_actions хранятся в таком виде:
титл 1 |*| титл2 |*| титл3

я сделал из них массив:
PHP:
скопировать код в буфер обмена
  1. Array ( [0] => КОНКУРС «РАДУГА ПРОЕКТОВ» ДЛЯ ДОШКОЛЬНИКОВ И МЛАДШИХ ШКОЛЬНИКОВ )

PHP:
скопировать код в буфер обмена
  1. Array([1] ...)
и т.п.

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

Мне нужны титлы контента.


Вот так может?


PHP:
скопировать код в буфер обмена
  1. for ($i=0; $i < count($cb_actions); $i++)
  2. {
  3.     $action = $cb_actions[$i];
  4.     $query->where("title LIKE %{$action}%");
  5. }

Только не работает чот((
10. Okula - 28 Сентября, 2012 - 07:54:54 - перейти к сообщению
MadMike, что ж непонятного-то в нём? Учи операторы LEFT и JOIN.
Вот как должен быть запрос:
PHP:
скопировать код в буфер обмена
  1. $mysqli->query("SELECT a.*, b.* FROM `h1vu5_comprofiler` AS a
  2. LEFT OUTER JOIN `h1vu5_content` AS b
  3. ON a.`cb_actions`=b.`title`");
11. MadMike - 28 Сентября, 2012 - 08:33:53 - перейти к сообщению
Okula пишет:
MadMike, что ж непонятного-то в нём? Учи операторы LEFT и JOIN.
Вот как должен быть запрос:
PHP:
скопировать код в буфер обмена
  1. $mysqli->query("SELECT a.*, b.* FROM `h1vu5_comprofiler` AS a
  2. LEFT OUTER JOIN `h1vu5_content` AS b
  3. ON a.`cb_actions`=b.`title`");


не прокатывает равенство обычное!
12. Okula - 28 Сентября, 2012 - 08:38:36 - перейти к сообщению
MadMike, а тебе какое равенство нужно? необычное? Радость
Запрос написал исходя из первого поста.

 

Powered by ExBB FM 1.0 RC1