SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.01.2012 00:41:33

lidervik
Участник
Зарегистрирован: 19.01.2012
Сообщений: 9

Запрос с получением всех значений из второй таблицы

Есть таблица USER в которой хранятся следующие данные:

++++++++++++++++++++++++++++++++++++
+LOGIN ++ CAT1 ++ CAT2 ++ CAT3 ++ RATING +
++++++++++++++++++++++++++++++++++++
+ petr   ||    1     ||     3   ||     5   ||   1       +
+++++++||+++++||+++++||++++++||+++++++
+ ivan   ||    2     ||     3   ||     5   ||   3       +
++++++++++++++++++++++++++++++++++++

Есть таблица CATALOG

++++++++++++++
+ ID   ++ NAME   +
++++++++++++++
+ 1    ||   op1    +
+++++||+++++++
+ 2    ||   op2    +
+++++||+++++++
+ 3    ||    op3   +
+++++||+++++++
+ 4    ||    op3   +
+++++||+++++++
+  5    || op3     +
+++++||+++++++
+ 6    || op3      +
++++++++++++++

Есть запрос в БД


$job_cat= "1";
$query=mysql_query("SELECT user.login AS name, user.cat1, user.cat2, user.cat3, user.rating
FROM user
WHERE user.cat1 = '".$job_cat."' OR user.cat2 = '".$job_cat."' OR user.cat3 = '".$job_cat."'
ORDER BY rating);


Далее вывожу все полученные строки в цикле while (с этим проблем нет) но вот, как в него же (в запрос) вывести все категории (op1,op2,...) к которым относится пользователь из таблицы catalog?
Помогите плиз с запросом в БД?!

Отредактированно lidervik (19.01.2012 01:01:46)

Неактивен

 

#2 19.01.2012 01:04:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Запрос с получением всех значений из второй таблицы

Неактивен

 

#3 19.01.2012 01:16:18

lidervik
Участник
Зарегистрирован: 19.01.2012
Сообщений: 9

Re: Запрос с получением всех значений из второй таблицы

vasya написал:

Трехкратный join ?
http://dev.mysql.com/doc/refman/5.5/en/join.html

Спасибо! Да наверное это как раз то что надо. Пойду пробовать, а есть ли еще какие варианты, так для расширения кругозора. С MySQL встречаюсь первый раз в жизни и за два дня изучения уж очень язык SQL-запросов попил моей кровушки ))

Неактивен

 

#4 19.01.2012 01:23:01

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Запрос с получением всех значений из второй таблицы

Подзапросы.

Неактивен

 

#5 19.01.2012 02:32:44

lidervik
Участник
Зарегистрирован: 19.01.2012
Сообщений: 9

Re: Запрос с получением всех значений из второй таблицы

lidervik написал:

$job_cat= "1";
$query=mysql_query("SELECT user.login AS name, user.cat1, user.cat2, user.cat3, user.rating
FROM user
WHERE user.cat1 = '".$job_cat."' OR user.cat2 = '".$job_cat."' OR user.cat3 = '".$job_cat."'
ORDER BY rating);

Получилось следующие:

$job_cat= "1";
$query=mysql_query("SELECT user.login AS name, catalog.name AS cName1, user.cat1, user.cat2, user.cat3, user.rating
FROM user LEFT JOIN catalog ON user.cat1 = catalog.id
WHERE user.cat1 = '".$job_cat."' OR user.cat2 = '".$job_cat."' OR user.cat3 = '".$job_cat."'
ORDER BY rating);

С одним я разобрался, получил в цикле 'cName1' со значением поля op1, а как быть с остальными значениями, мне еще нужны cName2, cName3, как их получить?

Отредактированно lidervik (19.01.2012 02:34:11)

Неактивен

 

#6 19.01.2012 02:41:27

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Запрос с получением всех значений из второй таблицы

SELECT user.login AS name, catalog.name AS cName1, user.cat1, user.cat2, user.cat3, user.rating, ...
FROM user JOIN catalog ON user.cat1 = catalog.id JOIN catalog c2 ON user.cat2 = c2.id JOIN catalog c3 ON user.cat3 = c3.id
WHERE user.cat1 = '".$job_cat."' OR user.cat2 = '".$job_cat."' OR user.cat3 = '".$job_cat."'
ORDER BY rating


А зачем вам left join? Разве у вас могут быть в первой таблице значения категорий, которых нет во второй?

Неактивен

 

#7 19.01.2012 04:10:12

lidervik
Участник
Зарегистрирован: 19.01.2012
Сообщений: 9

Re: Запрос с получением всех значений из второй таблицы

Все получилось. Спасибо тебе добрый человек!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson