Осталось объединить несколько рядов - PullRequest
1 голос
/ 02 ноября 2019

У меня есть следующие таблицы:

Tables

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

SELECT p.*, f.farm_name, f.county
FROM produce p
LEFT JOIN farms f on p.farm_id = f.id
GROUP by f.id
ORDER BY f.farm_name

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Прежние версии стандартов SQL (SQL-92 и более ранние) не разрешают запросы с предложением SELECT HAVING или ORDER BY, относящиеся к неагрегированным столбцам, которые не названы вGROUP BY пункт. Если вы посмотрите на исходный запрос, то увидите, что ваш запрос делает именно то, чего не позволяют эти стандарты.

SELECT p.*, f.farm_name, f.county
...
GROUP BY f.id

«неагрегирующий столбец» означает любой столбец, в котором не используется агрегатная функция, напримерas sum () count () avg () и т. д.

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

Это означает, что вы используете MySQL, и что у вас нет режима SQL ONLY_FULL_GROUP_BY на.

Я призываю вас избежать этой слабости MySQL, включите режим SQL ONLY_FULL_GROUP_BY.

См .: https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

1 голос
/ 02 ноября 2019
SELECT p.*
FROM produce p
inner join farms f on p.farm_id = f.id

в вашем php коде извлечения сделайте вот так:

$row["farm_name"];

Он будет возвращать имя фермы с каждой строкой продукта.

...