Я получаю доступ к базе данных mysql, структурированной в chado. Я ищу по продукту гена, для этого примера продукт представляет собой «бифункциональную ват-фукозасинтетазу: ВВП-4-дегидро-6-дезокси-D-маннозная эпимераза и ВВП-4-дегидро-6-L-дезоксигалактозоредуктаза».MySQL SUBSTRING с использованием заданных значений длины и позиции по сравнению с подстрокой языка программирования после извлечения
Я могу использовать инструкции JOIN, чтобы найти, на какой сборке находится этот ген, и каковы его координаты. Вышеуказанный оператор SQL действителен и вернет последовательность сборки (а не только последовательность генов) и начальную и конечную позиции для интересующего гена на сборке.
SELECT f.uniquename AS protein_accession, product.value AS protein_name, srcfeature.residues AS residue_sequence, srcassembly.name AS source_type, location.fmin AS location_min, location.fmax AS location_max, location.strand
FROM feature f
JOIN cvterm polypeptide ON f.type_id=polypeptide.cvterm_id
JOIN featureprop product ON f.feature_id=product.feature_id
JOIN cvterm productprop ON product.type_id=productprop.cvterm_id
JOIN featureloc location ON f.feature_id=location.feature_id
JOIN feature srcfeature ON location.srcfeature_id=srcfeature.feature_id
JOIN cvterm srcassembly ON srcfeature.type_id=srcassembly.cvterm_id
WHERE polypeptide.name = 'polypeptide'
AND productprop.name = 'gene_product_name'
AND product.value LIKE '%bifunctional GDP-fucose synthetase: GDP-4-dehydro-6-deoxy-D-mannose epimerase and GDP-4-dehydro-6-L-deoxygalactose reductase%';
Последовательность сборки очень длинная, и мне определенно не нужно все это. Лучше ли извлекать нужную часть, используя метод SUBSTRING MySQL, чтобы сохранить извлечение всей последовательности или использовать метод подстроки языка программирования после извлечения? Следующий запрос - это моя попытка метода SUBSTRING с использованием значений, полученных во время запроса для позиции и длины. Это не работает, я предполагаю, что для работы нужно несколько операторов SELECT. SQL становится действительно уродливым, и я даже не уверен, что рабочий конечный результат будет лучше.
Каковы ваши мысли, лучше ли это делать с помощью SQL SUBSTRING или просто использовать язык программирования и метод подстроки, чтобы отображать то, что я хочу, даже если бы я получил все это?
SELECT f.uniquename AS protein_accession, product.value AS protein_name, SUBSTRING(srcfeature.residues AS residue_sequence, location_min, location_max - location_min), srcassembly.name AS source_type, location.fmin AS location_min, location.fmax AS location_max, location.strand
FROM feature f
JOIN cvterm polypeptide ON f.type_id=polypeptide.cvterm_id
JOIN featureprop product ON f.feature_id=product.feature_id
JOIN cvterm productprop ON product.type_id=productprop.cvterm_id
JOIN featureloc location ON f.feature_id=location.feature_id
JOIN feature srcfeature ON location.srcfeature_id=srcfeature.feature_id
JOIN cvterm srcassembly ON srcfeature.type_id=srcassembly.cvterm_id
WHERE polypeptide.name = 'polypeptide'
AND productprop.name = 'gene_product_name'
AND product.value LIKE '%bifunctional GDP-fucose synthetase: GDP-4-dehydro-6-deoxy-D-mannose epimerase and GDP-4-dehydro-6-L-deoxygalactose reductase%';
РЕДАКТИРОВАТЬ Ниже приведен пример привести для другого гена (короче название). Я опустил часть в запрошенной последовательности, так как эта часть имеет длину в тысячи символов. Мне нужно было бы правильно использовать значения location_min и location_max, показанные здесь для SUBSTRING.
+-------------------+---------------------------------------------------+-------------+--------------+--------------+--------+
| protein_accession | protein_name | source_type | location_min | location_max | strand |
+-------------------+---------------------------------------------------+-------------+--------------+--------------+--------+
| ECDH10B_0026 | bifunctional riboflavin kinase and FAD synthetase | assembly | 21406 | 22348 | 1 |
+-------------------+---------------------------------------------------+-------------+--------------+--------------+--------+
Это изменение имеет смысл. К сожалению, запрос все еще не работает. Я думаю, потому что location_min и location_max - это значения, которые генерируются из этого запроса. Вот почему я решил, что, вероятно, потребуется несколько операторов SELECT. Один для получения значений location_min и location_max, а затем один для использования их в SUBSTRING srcfeature.residues. Вот ошибка, которую MySQL дает мне, если я использую этот запрос, как указано выше: ERROR 1054 (42S22): Неизвестный столбец 'location_min' в 'списке полей' – sage88
Итак, попытавшись сделать это, передайте всю последовательность и отредактируйте ее на стороне клиента в javascript, используя SQL SUBSTRING - это не только лучший способ сделать это, но и единственный способ сделать это. Последовательность настолько длинная, что не удается правильно загрузить ее, когда вы пытаетесь извлечь все это (и занимает около 15 секунд, чтобы отобразить что угодно). Поэтому я думаю, что вы указали мне в правильном направлении. – sage88
@ sage88. , , Я думаю, что вы можете просто использовать 'location.fmin' и' location.fmax' вместо псевдонимов. –