Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
#1

Лишние данные при JOIN

05.06.2013, 11:53. Просмотров 753. Ответов 14
Метки нет (Все метки)

Имеются 2 таблицы en_users, en_tasks(пользователи и задания)
При JOIN запросе, к примеру,
SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT
en_users.user_name,
en_users.user_login,
en_users.user_password,
en_tasks.task_type,
en_tasks.task_end,
en_tasks.task_string
FROM
en_users
INNER JOIN en_tasks ON en_users.user_id = en_tasks.user_id
WHERE en_users.user_id = 2008
, из таблицы en_users каждый раз дублируются данные

Как избавиться от этого? что необходимо дописать? SELECT DISTINCT не работает, гуглил, но толком ничего не нашел

Добавлено через 6 минут
нужно чтобы вместо дублирующих данные стояло хотя бы NULL
0
Миниатюры
Лишние данные при JOIN  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 11:53
Ответы с готовыми решениями:

Обработка всех значений при выводе из БД с JOIN при наличии одноименных полей
Имеем таблицу table id (первичный ключ) name kod mainid (может содержать id...

Нужно записывать данные в базу данных только при условии если данные уникальны
нужно пропустить те строки в БД, которые совпадают с массивом данных, который...

Join
Как из такой структуры таблиц одним запросом сделать выборку? Если можно,...

Inner join
всем привет. хочу вытащить данные из таблицы zapis в которой находятся в...

Join SQL
Привет, долго уже сижу, не могу разобратся, есть запрос в базу для получения...

14
DrobyshevAlex
1172 / 1122 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
05.06.2013, 12:47 #2
MySQL
1
group by en_users.user_id
1
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
05.06.2013, 12:57  [ТС] #3
не помогает, результат становится 1 строчкой, и половина данных из второй таблицы пропадает
0
lighty
18 / 18 / 2
Регистрация: 11.03.2011
Сообщений: 194
05.06.2013, 13:14 #4
так конечно у тебя дублируются данные, ты ведь еще тащишь данные en_tasks.task_type, en_tasks.task_end, en_tasks.task_string а они различны.... как ты хочешь видеть готовые данные по запросу?
1
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
05.06.2013, 13:46  [ТС] #5
чтобы на месте лишних данных NULL стояло, потому что в php тащить лишние данные не хочется
0
lighty
18 / 18 / 2
Регистрация: 11.03.2011
Сообщений: 194
05.06.2013, 14:14 #6
Ща подумаю

Добавлено через 21 минуту
Ну если только вот такое извращение тебе подойдет:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT eu.user_name,
           eu.user_login,
           eu.user_password,
           et.task_type,
           et.task_end,
           et.task_string
FROM    en_users eu
JOIN en_tasks et ON en_users.user_id = en_tasks.user_id
WHERE en_users.user_id = 2008
LIMIT 0, 1
UNION ALL
SELECT null as user_name,
           null as user_login,
           null as user_password,
           et.task_type,
           et.task_end,
           et.task_string
FROM    en_users eu
JOIN     en_tasks et ON en_users.user_id = en_tasks.user_id
WHERE (en_users.user_id = 2008) AND (et.task_type <> (SELECT et.task_type 
                                                                          FROM   en_tasks et
                                                                          WHERE et.user_id = 2008
                                                                          LIMIT 0, 1))
           AND (et.task_end<> (SELECT et.task_end
                                          FROM   en_tasks et
                                          WHERE et.user_id = 2008
                                          LIMIT 0, 1))
           AND (et.task_string<> (SELECT et.task_string
                                          FROM   en_tasks et
                                          WHERE et.user_id = 2008
                                          LIMIT 0, 1))
1
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
05.06.2013, 14:26  [ТС] #7
жесть конечно, спасибо, т.е. при JOIN мы всегда тащим лишние данные и никак от них по- простому не избавится?
0
lighty
18 / 18 / 2
Регистрация: 11.03.2011
Сообщений: 194
05.06.2013, 14:27 #8
Ну конечно ты же тянешь сперва главные данные из FROM а потом к ним крепишь то что в JOIN. Хоть код то работает?
0
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
05.06.2013, 14:29  [ТС] #9
нее, ошибку издает, [Err] 1054 - Unknown column 'en_users.user_id' in 'where clause', но ладно все равно спасибо, просто если данных будет намного больше, смысл тащить столько лишней информации в php, надо как то избавится, но такой пример я врядли пойму, надо браться за mysql конкретно спс
0
lighty
18 / 18 / 2
Регистрация: 11.03.2011
Сообщений: 194
05.06.2013, 14:30 #10
ну я без отладки писал, так что просто надо подправить....
1
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
05.06.2013, 14:31  [ТС] #11
окей, попробую
0
lighty
18 / 18 / 2
Регистрация: 11.03.2011
Сообщений: 194
05.06.2013, 14:33 #12
а если еще можно сделать следующим образом, сперва тянешь юзера и показываешь его там где надо а потом просто тянешь все его данные, уже без имени юзера, т.е. создать 2 запроса.
1
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
05.06.2013, 14:38  [ТС] #13
там на самом деле будет таких таблиц с user_id штук 5-8, еще не решил, это 5-8 запросов? многовато
0
lighty
18 / 18 / 2
Регистрация: 11.03.2011
Сообщений: 194
05.06.2013, 14:40 #14
5-8 эт не много, вот 85-88 это многовато)))
1
gfs2
0 / 0 / 0
Регистрация: 18.09.2012
Сообщений: 35
05.06.2013, 14:42  [ТС] #15
ну ок, раз немного значит ок
0
05.06.2013, 14:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2013, 14:42

LEFT JOIN
Есть две таблицы. Нужно взять из таблицы img (id), затем из таблицы comments...

LEFT JOIN
Здравствуйте, очень нужна помощь. Есть две таблицы: Первая : 'id' 'title'...

выборка join-where
есть такая структура бд CREATE TABLE IF NOT EXISTS `personnel`.`tbl_practice`...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru