Присоединение к таблице, создание повторяющейся записи в laravel - PullRequest
0 голосов
/ 17 октября 2018

Я просто хочу объединить содержимое 2 таблиц и отобразить его на основе идентификатора.

Обе таблицы содержат 3 записи.

Таблица a - Порядок выборки

Date Docname Products Quantity ID
1     A       A         1      1
2     B       B         2      1 
3     C       C         3      1

Таблица B - Типичные местоположения

Date Area lat long ID
 1    a    1   1   1
 2    b    2   2   1
 3    c    3   3   1

Выходные данные должны генерироваться как 3 строки со всеми столбцами таблицы A и столбцами Bгде ID = указанный идентификатор

Мне нужен вывод, подобный этому

Date Docname product Quantity Area lat long
1      A       A       1       a    1   1
2      B       B       2       b    2   2
3      C       C       3       c    3   3

Но он генерирует 9 строк (3 * 3) и дублирует количество строк, присутствующих в обеих таблицах.Его генерирование

Date Docname product Quantity Area lat long
1      A       A       1       a    1   1
2      B       B       2       b    2   2
3      C       C       3       c    3   3
1      A       A       1       a    1   1
2      B       B       2       b    2   2
3      C       C       3       c    3   3
1      A       A       1       a    1   1
2      B       B       2       b    2   2
3      C       C       3       c    3   3

Объединение количества строк в A * B - мне нужно только 3 строки относительно идентификатора.

Запрос -

$Report = DB::table('sampling_order')
             ->join('representativelocations','representativelocations.representativeid','=','sampling_order.representativeid')
             ->select('sampling_order.representativeid as representativeid',
             'sampling_order.date as date',
             'sampling_order.doctor_name as doctor_name',
             'sampling_order.products as products',
             'sampling_order.quantity as quantity',
             'representativelocations.latitude as latitude',
             'representativelocations.longitude as longitude',
             'representativelocations.area as area')
             ->whereBetween('sampling_order.date', [$Datefrom, $Dateto])
             ->where('sampling_order.representativeid','=',$Representativeid)->get();

Ответы [ 2 ]

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

Что я вижу, все идентификаторы '1' в двух таблицах, поэтому в результате должно быть 3 * 3 = 9 строк.Полагаю, вам может понадобиться следующее:

id продукта-области A-B области-C

1 ____ A ____ 1 ____ 2 _____ 3

1 ____ B ____ 2 ____ 3 _____ 4

, если это так.вам нужно присоединиться три раза.

SELECT * FROM A
LEFT JOIN (SELECT *, area AS area-A FROM B WHERE area = 'a' ) AS B ON B.id = A.id
LEFT JOIN (SELECT *, area AS area-B FROM B WHERE area = 'b' ) AS C ON C.id = A.id
LEFT JOIN (SELECT *, area AS area-C FROM B WHERE area = 'c' ) AS D ON D.id = A.id

Надеюсь, это то, что вы хотите.

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

Исходя из требований, я думаю, вам следует попробовать присоединиться к date, а не ID, как показано ниже.Это вернет 3 строк, как вы ожидаете.

select so.date,so.Docname,so.products,so.Quantity,rl.Area,rl.lat,rl.long from Sampling_order AS so
INNER JOIN  Representative_locations as rl ON so.Date = rl.Date
WHERE so.ID = 1

При необходимости измените имена таблиц и столбцов.

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