MySQL ПРИСОЕДИНЯЕТСЯ к NULL или нет - PullRequest
0 голосов
/ 30 июня 2018

Я практически не практикуюсь с MySQL и PHP, но у меня есть проект, над которым я работаю для друга, который включает выбор данных из двух таблиц и объединение их в один результат - кажется простым.

Таблица 1 имеет 13 полей, но важными являются id (автоинкремент, первичный ключ) и serial (уникально). Остальные просто такие, как клиент , описание и т. Д. И т. Д.

Изображения имеет 3 поля, picID (автоинкремент, первичный ключ), imagePath и серийный

Мне нужно получить все данные из Таблицы 1, и если в Фото есть соответствующая фотография (идентифицируемая тем же серийным номером - возможна только одна фотография, возможная для каждого серийного номера), затем также получить эти данные. Затем я вывожу данные из таблицы Table1 и использую imagePath из Pictures для построения изображения в HTML, если оно было загружено.

Я использовал следующий запрос:

$sql = "SELECT * FROM Table1 LEFT JOIN Pictures ON Table1.serial = Pictures.serial ORDER BY Table1.serial";

Что кажется идеальным, ЗА ИСКЛЮЧЕНИЕМ, если в какой-либо строке из Table1 нет совпадения фотографий в Pictures , serial больше не возвращается с остальными данные, хотя в остальной части строки все верно.

Я рассмотрел различные типы JOIN, и нужен ли мне просто UNION, но я немного озадачен. Как запросить, чтобы каждая строка таблицы Table1 plus Pictures.imagePath была добавлена ​​в соответствующую строку Table1, если она существует?

Спасибо за ваше время !!!! :)

РЕДАКТИРОВАТЬ с выводом дампа массива

    Array
(
    [0] => Array
        (
            [id] => 51
            [0] => 51
            [client] => Test Client
            [1] => Test Client
            [location] => Ayreford House
            [2] => Ayreford House
            [description] => Ceiling cavity of building XYZ
            [3] => Ceiling cavity of building XYZ
            [serial] =>
            [4] => 18001
            [blah] => 123456
            [5] => 123456
            [fw] => Wall
            [6] => Wall
            [pm] => Plasterboard
            [7] => Plasterboard
            [stuff] => ventilation ducting
            [8] => ventilation ducting
            [ref] => S1000-2018
            [9] => S1000-2018
            [otheref] => XTX-1325
            [10] => XTX-1325
            [notes] => Updated photo
            [11] => Updated photo
            [date] => 2018-06-28 21:37:49
            [12] => 2018-06-28 21:37:49
            [picID] => 
            [13] => 
            [imagePath] => 
            [14] => 
            [15] => 
        )

1 Ответ

0 голосов
/ 30 июня 2018

Это происходит потому, что и Table1, и Pictures имеют столбец с именем serial и удаляют имена таблиц при генерации ключей массива. Вероятно, он делает что-то подобное внутри:

$result = array()
$result[0] = Table1.serial;
$result['serial'] = Table1.serial;
$result[1] = Table1.client;
$result['client'] = Table1.client;
....
$result[14] = Pictures.serial;
$result['serial'] = Pictures.serial;

Таким образом, вы получите только Picture.serial в качестве значения для ключа 'serial' в результирующем массиве.

Один из способов исправить это - явно указать столбцы и не включать Pictures.serial, например:

SELECT 
  Table1.id,
  Table1.client,
  Table1.location,
  Table1.description,
  Table1.serial, 
  Pictures.notes
FROM
  Table1 
LEFT JOIN 
  Pictures ON Table1.serial = Pictures.serial 
ORDER BY 
  Table1.serial
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...