Оставил соединение, мне нужно объяснение о коде

0

Я смотрю учебник. Есть код, который я не понимаю, что должно делать.

$sql = 'SELECT p.*, 
      a.screen_name AS author_name, 
      c.name AS category_name
    FROM 
      posts p
      LEFT JOIN 
        admin_users a ON p.author_id = a.id
      LEFT JOIN 
        categories c ON p.category_id = c.id
    WHERE 
      p.id = ?';

Я читал о левых соединениях, но я их не понимал. Может кто-нибудь, пожалуйста, объясните мне код, который я поделил. Заранее спасибо!

Теги:
left-join

1 ответ

2
Лучший ответ

Представьте, что у вас есть две таблицы. Тот, который хранит информацию о программистах на вашем веб-сайте и другую таблицу, которая отслеживает их онлайн-покупки.

Таблица ПРОГРАММ

+--------------------------------------------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Desire   |  32 | 123 fake s|  3000.00 |
|  2 | Jamin    |  25 | 234 fake s|  2500.00 |
|  3 | Jon      |  23 | 567 fake s|  2000.00 |
|  4 | Bob      |  30 | 789 fake s|  1500.00 |
|  5 | OtherGuy |  31 | 890 fake s|  1000.00 |
|  6 | DudeMan  |  32 | 901 fake s|   500.00 |
+--------------------------------------------+

Таблица покупок

+---------------------------------------------+
| ORDER_ID    | PROG_ID |    DATE    | PRICE  | 
+-------------+---------+---------------------|
|  1          | 1       |  1-1-2017  | 100    |
|  2          | 2       |  1-2-2017  | 200    |
|  3          | 6       |  1-3-2017  | 300    |
+---------------------------------------------|

Вы решили, что вам нужно создать новую таблицу для консолидации этой информации в таблице, содержащей определенные столбцы.

Например, вы считаете, что для целей доставки было бы неплохо иметь таблицу, в которой есть идентификаторы, столбцы NAME, PRICE и DATE.

В настоящее время таблицы, которые мы имеем, не отображают все это в одной таблице.

Если бы мы были В ЛЮБОМ СОЕДИНЕНИИ этих таблиц, мы закончили бы заполнение нужных столбцов значениями NULL, в которых нет информации для объединения.

SELECT ID, NAME, PRICE, DATE
    FROM PROGRAMMERS
    LEFT JOIN PURCHASES
    ON PROGRAMMERS.ID = PURCHASES.PROG_ID;

Обратите внимание, что я выбираю столбцы, которые я хочу из стартовой таблицы, а затем присоединяюсь к правой таблице, даже если может отсутствовать информация.

РЕЗУЛЬТАТ РАБОТЫ

+-------------------------------------+
| ID | NAME     | PRICE   |   DATE    |
+----+----------+-----------------+---+
|  1 | Desire   | 100     | 1-1-2017  |
|  2 | Jamin    | 200     | 1-2-2017  |
|  3 | Jon      | NULL    |   NULL    |
|  4 | Bob      | NULL    |   NULL    |
|  5 | OtherGuy | NULL    |   NULL    |
|  6 | DudeMan  | 300     | 1-3-2017  |
+-------------------------------------+

Для визуального представления разницы между SQL JOINs проверьте https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins.

  • 0
    Спасибо друг. Теперь я это понимаю. У меня просто еще один простой вопрос. Можете ли вы сказать мне, почему мы ВЫБИРАЕМ p. * В коде, который я показал ранее? Я понимаю, что ". *" Будет соответствовать каждому слову, начинающемуся с буквы "p". Но я не могу понять причину этого.
  • 0
    @DesireOn Пожалуйста, смотрите: stackoverflow.com/a/3639964/7813290 об использовании "*". В этом случае кажется, что вы получаете каждый столбец в p.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню