запрос sql

Аватар пользователя screenager@drupal.org screenager@drup... 20 июня 2010 в 23:41

Здравствуйте,
ребята подскажите как правильно выполнить запрос
сейчас стоит "SELECT n.nid, n.created FROM {node} n WHERE n.type = '$content_type' AND n.status = 1 ORDER BY n.created DESC"
т.о. выводятся все ноды заданного типа
а нужно выводить по одной ноде заданного типа но с разными присвоенными терминами (у ноды всего один присвоенный термин), т.е. чтобы было исключение по термину, не знаю как точно но что типа DISTINCT(t.tid)

Комментарии

Аватар пользователя elia elia 21 июня 2010 в 0:17
SELECT DISTINCT d.nid, d.created
FROM(
SELECT
         n.nid, n.created, t.tid
FROM
        {node} n,
    {term_node} t
WHERE
        n.nid = t.nid
AND n.type = '$content_type'
AND n.status = 1
    ) d
Аватар пользователя screenager@drupal.org screenager@drup... 21 июня 2010 в 6:55

"elia" wrote:
SELECT DISTINCT d.nid, d.created
FROM(
SELECT
n.nid, n.created, t.tid
FROM
{node} n,
{term_node} t
WHERE
n.nid = t.nid
AND n.type = '$content_type'
AND n.STATUS = 1
) d

вроде не срабатывает =(, выводит все ноды
чтоб быть точным запрос выглядит сейчас так

<?php
  $content_type = 'portfolio';
  $result1 = pager_query(db_rewrite_sql("SELECT DISTINCT d.nid, d.created
FROM(
SELECT
         n.nid, n.created, t.tid
FROM
        {node} n,
    {term_node} t
WHERE
        n.nid = t.nid
AND n.type = '$content_type'
AND n.STATUS = 1
    ) d"
),6);
  while ($node = db_fetch_object($result1)) {
    $output .= node_view(node_load(array('nid' => $node->nid)), 1);
  }
print $output;
?>
Аватар пользователя elia elia 21 июня 2010 в 10:18

"<a href="mailto:screenager@drupal.org">screenager@drupal.org</a>" wrote:
вроде не срабатывает =(, выводит все ноды
чтоб быть точным запрос выглядит сейчас так

Так оно и есть Smile
Сам понял позже. Надо первым запросом отбирать tid, затем во втором запросе отбирать ноды с данным tid и указанием limit 0, 1.
Чисто схематически:

$tids = db_query(SELECT TID FROM {term_node});
while ($tid = db_result($tids)) {
$nid = db_result(db_query("SELECT n.nid, n.created FROM {node} n, {term_node} t WHERE n.type = '$content_type' AND n.status = 1 AND t.nid = n.nid AND t.tid = %s ORDER BY n.created DESC LIMIT 0,1", $tid));
$output .= node_view(node_load(array('nid' => $nid)), 1);
}
Аватар пользователя gumk gumk 21 июня 2010 в 10:32
SELECT DISTINCT(t.tid), n.nid,
FROM {node} n,{term_node} t
WHERE   n.nid = t.nid
AND n.type = '$content_type'
AND n.STATUS = 1
Аватар пользователя elia elia 21 июня 2010 в 10:34

2gumk:
проблема в том, что это перестает работать как только у ноды появляется более одного tid. Автору вопроса сейчас это неактуально, а завтра станет актуально.

Аватар пользователя screenager@drupal.org screenager@drup... 21 июня 2010 в 10:56

"elia" wrote:
$tids = db_query(SELECT TID FROM {term_node});
while ($tid = db_result($tids)) {
$nid = db_result(db_query("SELECT n.nid, n.created FROM {node} n, {term_node} t WHERE n.type = '$content_type' AND n.status = 1 AND t.nid = n.nid AND t.tid = %s ORDER BY n.created DESC LIMIT 0,1", $tid));
$output .= node_view(node_load(array('nid' => $nid)), 1);
}

здесь по моему несколько запросов будет вместо одного, что не есть хорошо?
также попробывал его, вообще ни чего не выводит

Аватар пользователя screenager@drupal.org screenager@drup... 21 июня 2010 в 10:53

"gumk" wrote:
SELECT DISTINCT(t.tid), n.nid,
FROM {node} n,{term_node} t
WHERE n.nid = t.nid
AND n.type = '$content_type'
AND n.STATUS = 1

этот код тоже к сожалению выводит все ноды Sad

Аватар пользователя elia elia 21 июня 2010 в 10:54

"<a href="mailto:screenager@drupal.org">screenager@drupal.org</a>" wrote:
здесь по моему несколько запросов будет вместо одного, что не есть хорошо?

Нормально Smile

Аватар пользователя screenager@drupal.org screenager@drup... 21 июня 2010 в 12:23

"elia" wrote:
Нормально :)

"<a href="mailto:screenager@drupal.org">screenager@drupal.org</a>" wrote:
также попробывал его, вообще ни чего не выводит

Аватар пользователя elia elia 21 июня 2010 в 12:24

"<a href="mailto:screenager@drupal.org">screenager@drupal.org</a>" wrote:
также попробывал его, вообще ни чего не выводит

а черновик и не выведет ничего. на то он и черновик Smile