MySQL 5.5.43
растительного Я работаю на базе 7.200 штаммов каннабиса и нужно отобразить список штаммов, наряду с наиболее популярными заявляемыми видами по их заводчикам.Outer присоединиться к подзапросу самого популярного появления вида
Субъект довольно запутанным, так вот несколько фактов, которые помогут вам понять, где моя путаница заключается:
- Каждый штамм каннабис является один из следующих видов; Indica, Sativa или Ruderalis, или это может быть крест из всех трех.
- У популярных штаммов может быть до 30 различных селекционеров, производящих семена этого штамма.
- Каждый заводчик этого одного штамма может иметь несколько разные кресты/генетику и сообщать о разных видах. Например: Breeder1 утверждает, что StrainX - это 100% заявка Indica и Breeder2. StrainX - это преимущественно Indica (возможно, 90% Indica и 10% Sativa). По-видимому, влияние растения Sativa поднимает настроение, а Indica немного удручает, поэтому очень важно регистрировать небольшие различия в каждой породе в лечебных целях.
Пример РАСА:
Для одного очень популярного штамма под названием White Widow, это результирующий набор я продюсировал. У этого есть 29 различных селекционеров с каждым селекционером, претендующим на различные виды. Как видно из результатов, наиболее популярным видом этого штамма является Indica/Sativa (равный гибрид).
SELECT
s.id,
b.id AS breederID,
b.breederName AS breederName,
GROUP_CONCAT(DISTINCT sp.species ORDER BY sp.species ASC SEPARATOR '/') AS species
FROM strains AS s
LEFT JOIN strainBreedersDir AS sbd ON s.id = sbd.strainID
LEFT JOIN breeders AS b ON sbd.breederID = b.id
LEFT JOIN strainBreederSpeciesDir AS sbsd ON s.id = sbsd.strainID AND sbd.breederID = sbsd.breederID
LEFT JOIN species AS sp ON sbsd.speciesID = sp.id
WHERE s.id = 6782
GROUP BY s.id, sbd.breederID
РЕЗУЛЬТАТ Я ХОЧУ
Я хотел бы показать список имен деформаций и рядом с каждой из них я хотел бы показать список заводчиков и наиболее популярные/средние заявленные виды всеми заводчиками. Так что, как я показал ранее, наиболее популярные виды, селекционеры для этого штамма является Indica/Sativa, и хотели бы это показано, как это:
strainID | strainName | breeders | averageSpecies
--------------------------------------------------------------------------
6782 | White Widow | Green House Seeds, | Indica/Sativa
| | Barney's Farm
ЧТО ИМЕЮТ Я ПРОБОВАЛ:
Вместо показывая самые популярные виды рядом с каждым, у меня есть первый экземпляр рекордных видов рядом с каждым. Я думал, что этого будет достаточно, но первый экземпляр вида может быть пустым, так как в настоящее время существует около 100 штаммов с неизвестными видами. Поэтому я не хочу, чтобы первый экземпляр вида был «Неизвестным», когда на самом деле есть другие заводчики этого штамма, которые знают, какие виды в нем. Итак, я думаю, что лучше всего определить самые зарегистрированные виды и показать это вместо этого. Это где я получил до сих пор:
SELECT
s.id,
s.strainName,
GROUP_CONCAT(DISTINCT b.breederName ORDER BY b.breederName ASC separator ', ') AS breeders,
COALESCE(NULLIF(ps.primarySpecies,''),'Unknown') AS primarySpecies
FROM strains AS s
LEFT JOIN strainBreedersDir AS sbd ON s.id = sbd.strainID
LEFT JOIN breeders AS b ON sbd.breederID = b.id
LEFT OUTER JOIN (
SELECT
sbd.breederID AS breederID,
GROUP_CONCAT(DISTINCT sp.species ORDER BY sp.species ASC SEPARATOR '/') AS primarySpecies
FROM strains AS s
LEFT JOIN strainBreedersDir AS sbd ON s.id = sbd.strainID
LEFT JOIN strainBreederSpeciesDir AS sbsd ON s.id = sbsd.strainID AND sbd.breederID = sbsd.breederID
LEFT JOIN species AS sp ON sbsd.speciesID = sp.id
GROUP BY s.id, sbd.breederID
) AS ps ON sbd.breederID = ps.breederID
WHERE s.id = 6782
GROUP BY s.id
РЕЗУЛЬТАТ
id | strainName | breeders | species
----------------------------------------------------------
6782 | White Widow | Green House Seeds, | Indica/Sativa
| | Barney's Farm |
Но я не могу работать, как модифицировать OUTER JOIN
, чтобы показать наиболее популярных видов, а не только первый присоединился к ряду. Я пробовал так много вариантов различных запросов внешнего соединения со многими ошибками и потерял контроль над тем, что было пробовано.
Как можно показать самые популярные виды?
СТРУКТУРА БАЗЫ:
strains
id (PK AUTO) | strainName (UNIQUE)
---------------------------------------------
6782 | White Widow
-
strainBreedersDir
strainID (FK UNIQUE) | breederID (UNIQUE)
---------------------------------------------
6782 | 16
6782 | 23
-
breeders
id (PK AUTO) | breederName (UNIQUE)
---------------------------------------------
16 | Green House Seeds
23 | Barney's Farm
-
strainBreederSpeciesDir
strainID (FK UNIQUE) | breederID (INT UNIQUE) | speciesID (INT UNIQUE)
----------------------------------------------------------------------
6782 | 16 | 1
6782 | 16 | 2
6782 | 23 | 5
-
species
id (PK AUTO) | species (UNIQUE)
-------------------------------------
1 | Indica
2 | Sativa
3 | Ruderalis
4 | Mostly Indica
5 | Mostly Sativa
6 | Mostly Ruderalis
HERE IS AN SQLFIDDLE - любезно Хуана Карлоса Оропеза.
Abba Zabba, ты мой единственный друг! – Jim
Мне понадобятся некоторые данные * образца * для проверки моего запроса. –
[SQLFiddle] (http://sqlfiddle.com) поможет нам. Никто не любит создавать таблицы и настраивать тестовые данные, чтобы мы могли тестировать запросы, чтобы они работали. Для тебя. –