В Mysql при использовании JOIN для 3 таблиц, получая один и тот же вывод несколько раз в массиве - PullRequest
0 голосов
/ 26 октября 2018

У меня есть 3 таблицы, одна с одной строкой для идентификатора, а две другие с несколькими строками для одного и того же идентификатора.

Я написал запрос для объединения 3 таблиц

$id = $_GET['id'];

$joinSelect = "
    SELECT form_submitted.*,
    GROUP_CONCAT(form_submitted_news.news) as news,
    GROUP_CONCAT(form_submitted_language.language) as LANGUAGE
    FROM form_submitted 
    JOIN form_submitted_news ON form_submitted.id = form_submitted_news.cid
    JOIN form_submitted_language ON form_submitted.id = form_submitted_language.cid
    WHERE form_submitted.id='$id'
        AND form_submitted_language.cid='$id' 
        AND form_submitted_news.cid='$id' 
        GROUP BY form_submitted.id
";  

$result4 = mysqli_query($con,$joinSelect);

$update4 = mysqli_fetch_array($result4);

print_r($update4);

Но когда я печатаю массив, я получаю повторяющиеся значения в этих двух таблицах с несколькими строками -> form_submitted_news и form_submitted_language

Вывод:

Array (
 [0] => 41 [id] => 41
 [1] => Ashok1 [name] => Ashok1 
 [2] => female [gender] => female 
 [3] => 2018-10-25 [dob] => 2018-10-25 
 [4] => ashok1@mail.com [email] => ashok1@mail.com 
 [5] => [password] => 
 [6] => Mech [dept] => Mech
 [7] => Sub1 [subject] => Sub1 
 [8] => address1 [address] => address1 
 [9] => logo_1540534309.png [image] => logo_1540534309.png
 [10] => 1 [status] => 1
 [11] => national,national,international,international,sports,sports 
   [news] => national,national,international,international,sports,sports 
 [12] => english,hindi,english,hindi,english,hindi 
   [LANGUAGE] => english,hindi,english,hindi,english,hindi 
)  

здесь массив [11] и [12]получают повторяющиеся значения, представляющие собой таблицу с несколькими строками.

1 Ответ

0 голосов
/ 26 октября 2018

Добро пожаловать!

Это из-за того, как работает JOIN

У вас есть 2 соответствующие языковые строки и 3 соответствующие записи новостей для идентификатора form_submitted, поэтому они дублируются

Перед применением GROUP BY ваш набор строк будет выглядеть следующим образом

id .   language .       news . 
41 .   national .       english
41 .   national .       hindi
41 .   international .  english
41 .   international .  hindi
41 .   sports .         english
41 .   sports .         hindi

Это можно увидеть, если вы удалите GROUP BY из вашего запроса

@ RaymondNijland является правильным в этом GROUP BY(DISTINCT ..) исправит это для вас

Лично я бы хотел сделать эти СОЕДИНЕНИЯ своего рода отдельно, а не исправлять результат позже .. У меня был бы соблазн запустить

   SELECT fs.*,
          fsn.news,
          fsl.language

     FROM form_submitted fs

     JOIN (
       SELECT cid,
              GROUP_CONCAT(news) news
         FROM form_submitted_news
        WHERE cid = '$id' /** not strictly necessary, but may improve performance */
     GROUP BY cid
          ) fsn
       ON fsn.cid = fs.id

     JOIN (
       SELECT cid,
              GROUP_CONCAT(language) language
         FROM form_submitted_language
        WHERE cid = '$id' /** not strictly necessary, but may improve performance */
     GROUP BY cid
          ) fsl
       ON fsl.cid = fs.id

    WHERE fs.id = '$id'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...