MYSQL LEFT JOIN не показывает все данные - PullRequest
0 голосов
/ 02 января 2019

Я выполняю этот запрос SQL LEFT JOIN в PHP, но он показывает один важный столбец, который равен user_id как ноль, а не равен нулю .

MYSQL QUERY

SELECT
      a.*,
      b.*,
      c.*,
      d.*
  FROM ts_users_skills a
  LEFT JOIN ts_students_log b
      ON a.`user_id` = b.`user_id`
  LEFT JOIN ts_students_info c
      ON a.`user_id` = c.`user_id`
  LEFT JOIN `geo_records` d
      ON a.`user_id` = d.`user_id`
  WHERE (a.`skillsTeach` = '$skill_1' OR a.`skillsTeach` = '$skill_2'
      OR a.`skillsTeach` = '$skill_3')
  GROUP BY a.`user_id`;

Выход JSON

    {
    "status": "success",
    "nearby_teachers": [
        {
            "user_id": null,
            "skillsTeach": "PHP",
            "email": "praveenkumarkp666@gmail.com",
            "country_code": "91",
            "username": "praveenkum",
            "name": "Procusa Founder",
            "gender": "M",
            "birthday": "1997-02-25",
            "location": "Bhubaneswar"
        },
        {
            "user_id": null,
            "skillsTeach": "marketing",
            "email": "ashok@procusa.in",
            "country_code": "91",
            "username": "ashok",
            "name": "Ashok the founder 2",
            "birthday": "1993-11-18",
            "location": "Bhubaneswar"
        },
        {
            "user_id": null,
            "skillsTeach": "html",
            "email": "talspo@gmail.com",
            "country_code": "91",
            "username": "talspo",
            "name": "Procusa Founder",
            "gender": "M",
            "birthday": "1997-01-01",
            "location": "Bhubaneswar"

        }
    ]
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Проблема с вашим кодом в том, что он возвращает несколько столбцов с именем user_id. Некоторые из этих значений, которые приходят из LEFT JOIN с, могут выглядеть как NULL.

При сериализации в JSON, где ключи уникальны, вероятно, что выбрано «неправильное» поле, в результате чего получается значение NULL.

Чтобы решить эту проблему, вы хотите перечислить точно поля, которые нужно извлечь из каждой таблицы, вместо использования *. Конечно, user_id должно исходить из таблицы, которая не LEFT JOIN ed:

SELECT
  a.user_id, a.field1, a.field2
  b.field11, b.field12
  c.field21, c.field22, c.field23
  d.field31
...

Детали

Вы выбираете поля, используя *:

SELECT
  a.*,
  b.*,
  c.*,
  d.*
...

Но ваш запрос показывает, что у вас есть несколько полей с именем user_id:

...
LEFT JOIN ts_students_log b
  ON a.`user_id` = b.`user_id`
LEFT JOIN ts_students_info c
  ON a.`user_id` = c.`user_id`
LEFT JOIN `geo_records` d
  ON a.`user_id` = d.`user_id`
 ...
0 голосов
/ 02 января 2019

У вас есть несколько столбцов user_id в разных таблицах. В вашем JSON есть только одно поле user_id, неясно, из какой он таблицы.

Очевидно, что в этот момент данные теряются, JSON содержит поле user_id из набора данных без заполненного поля user_id.

Попробуйте использовать user_id из таблицы, отличной от ts_users_skills a.

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