Я пытаюсь решить проблему второго дня, но пока не добился успеха.Объедините несколько запросов MySql в один запрос
Моя цель:
Для определенного термина таксономии ID (например, 1) Мне нужно, чтобы получить по крайней мере один Imagefield FilePath узлов, принадлежащих к этому термин идентификатор (TID 1)
Ниже три вопроса, которые дают мне то, что мне нужно. Все работает отлично, но я знаю, что это выглядит очень уродливо, и, я уверен, есть большая проблема с производительностью.
$childterm = 10; // Taxonomy term ID
$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']; // Extracting node VID by term ID that will be used futher
$result = db_fetch_array(db_query("SELECT field_image_cache_fid FROM
content_field_image_cache WHERE
vid = '%d'", $nvid));
$fid = $result['field_image_cache_fid']; // Extracting file ID from array
$result = db_fetch_array(db_query("SELECT filepath FROM files WHERE
files.fid = '%d'", $fid));
$filepath = $result['filepath']; // Finally. Extracting file path from array
Пожалуйста, посмотрите изображение.
Как я могу улучшить запрос? Могу ли я получить значение filepath, используя только один SQL-запрос?
Заранее спасибо.
Я думаю, что они, вероятно, должны быть внутренними объединениями, а не левыми внешними соединениями. –
@Mark B: Правда, старые привычки умирают тяжело. – googletorp
Кроме того, помните о том, что CCK, модуль, предоставляющий такие таблицы, как content_field_image_cache, может (и, следовательно, WILL) изменять макет базы данных по своему усмотрению. Эта таблица может просто исчезнуть при конфигурационных изменениях. Запросы, подобные вашим, затем будут разбиты. По крайней мере, вы можете поместить в эту документацию. Или, более прочный, выполните проверки в hook_requirements(). – berkes