Разбираюсь со сложными(для меня) SQL запросами.
Практический пример:
есть термин таксономии, скажем 10, имея который, нужно взять пути к файлам поля Imagecache в нодах, которые имеют тип 'product' и помечены этим термином (т.е id 10). Пути к файлам нужны не все, а один, скажем первый встреченный.
Я довольно быстро настрочил такое:
<?php
$childterm
= 10; // Термин;
$result = db_fetch_array(db_query("SELECT node.vid FROM node
JOIN term_node ON node.vid=term_node.vid
WHERE term_node.tid=$childterm
AND node.type= 'product'
LIMIT 0, 1"));
$nvid = $result['vid'];
$result = db_fetch_array(db_query("SELECT field_image_cache_fid
FROM $image_table
WHERE vid = '%d'", $nvid));
$fid = $result['field_image_cache_fid'];
$result = db_fetch_array(db_query("SELECT filepath FROM files
WHERE files.fid = '%d'", $fid));
$filepath = $result['filepath'];
?>
Невооружённый взглядом видно, что тут аж 3 запроса+гора быдлокода, но это работает
Мне на Stackowerflow подсказали такой код:
<?php
$childterm
= 10; // Термин;
$sql = "SELECT f.filepath FROM {node} AS n
INNER JOIN {term_node} AS t ON t.nid = n.nid
INNER JOIN {content_field_image_cache} as c ON c.nid = n.nid
INNER JOIN {files} AS f on f.fid = c.fid
WHERE n.type = '%s'
AND t.tid = '%d'";
$result = db_query($sql, 'product', $childterm);
?>
Это выглядит намного убедительнее, но не работает. Кто наставит на правильный путь?
Ещё картинка
Комментарии
Связывать по nid-у плохой тон
В моём варианте связано по vid, но во втором варианте - по nid. Наверное ошибка, но по vid, я пробовал, тоже не работает.
Хз, мозг уже не работает, на пару сраных строк угробил весь день
У меня у самого моск уже не воркает, понедельник день тяжёлый + перевод часов, так штоле:
Вроде всё связал, но нет подобной структуры вроде как под рукой
<?php
SELECT f.filepath FROM node n
INNER JOIN term_node tn ON tn.vid = n.vid
INNER JOIN content_field_image_cache cf ON cf.vid = n.vid
INNER JOIN files f ON f.fid = cf.field_image_cache_fid
WHERE n.type = 'product' AND tn.tid = 10
?>
(c) RxB
Это заработало
Полная версия, авось кому-нибудь понадобиться
<?php
$childterm
= 10;// Термин таксономии$nodetype = 'product';// Тип документа
$sql = "SELECT f.filepath FROM node n
INNER JOIN term_node tn ON tn.vid = n.vid
INNER JOIN content_field_image_cache cf ON cf.vid = n.vid
INNER JOIN files f ON f.fid = cf.field_image_cache_fid
WHERE n.type = $nodetype AND tn.tid = $childterm LIMIT 0, 1";
$result = db_fetch_array(db_query($sql));
$filepath = $result['filepath']; // Путь к картинке ?>
Спасибо всем участникам дискуссии, особенно Виктору
фигурные скобки расставь