mysql_fetch_array и ключи массива - PullRequest
       3

mysql_fetch_array и ключи массива

0 голосов
/ 29 августа 2011

Этот код работает:

$row = array(5,6,89,97,101);
$found = array();
$post = 89;
$count_row = count($row);
for($i = 0; $i < $count_row; $i++){
    if($row[$i]==$post){
        $found[] = $row[$i-2];
        $found[] = $row[$i-1];
        $found[] = $row[$i];
        $found[] = $row[$i+1];
        $found[] = $row[$i+2];
        var_dump($found);
    }
}

И это не так, вероятно, что-то не так в mysql_fetch_array;

$found = array();
        $q = "SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id='$term_tax_id'";
        $rs = mysql_query($q) or die(mysql_error());
        $row = mysql_fetch_array($rs, MYSQL_NUM);
        $count_row = count($row);
        for($i = 0; $i < $count_row; $i++){
        print_r($row);
            if($row[$i]==$post){
                $found[] = $row[$i-2];
                $found[] = $row[$i-1];
                $found[] = $row[$i];
                $found[] = $row[$i+1];
                $found[] = $row[$i+2];
                var_dump($found);
            }
        }

Ничего не отображается, если сообщение больше 1. Кто-нибудь знаетспособ решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 29 августа 2011

mysql_fetch_array() выбирает одну строку, которая, в вашем случае, содержит ровно один столбец.

Вы должны либо запросить все строки из набора результатов одновременно (что я не знаю, как это работает), или вы должны сделать это:

$q = "SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id='$term_tax_id'";
$rs = mysql_query($q) or die(mysql_error());
$data = array();
while ($row = mysql_fetch_array($rs, MYSQL_NUM)) {
    $data[] = $row[0];
}
for($i = 2; $i < count($data) - 2; $i++){ // adjusted boundaries
    if($data[$i]==$post){
        $found[] = $data[$i-2];
        $found[] = $data[$i-1];
        $found[] = $data[$i];
        $found[] = $data[$i+1];
        $found[] = $data[$i+2];
        var_dump($found);
    }
}

}

Я также скорректировал границы: если вас интересует диапазон от $i-2 до $i+2, вам следует толькопробег от 2 до end-2.

1 голос
/ 29 августа 2011

Оператор выбора должен быть переписан так, чтобы он возвращал только те значения, которые вы ищете. Один из способов сделать это - UNION из двух селекторов, один из которых возвращает меньшие идентификаторы объекта, а другой - больший. Вам также следует использовать класс WordPress wpdb. Во-первых, администратор сайта может изменить префикс таблицы с "wp_" на что-то другое; $wpdb->term_relationships даст правильное имя для таблицы.

$statement = $wpdb->prepare(
   "  (SELECT object_id 
        FROM $wpdb->term_relationships 
        WHERE term_taxonomy_id= %d 
          AND object_id <= %d
        ORDER BY object_id DESC 
        LIMIT 3)
    UNION
      (SELECT object_id 
        FROM $wpdb->term_relationships 
        WHERE term_taxonomy_id= %d
          AND object_id > %d
        ORDER BY object_id ASC 
        LIMIT 2)
      ORDER BY object_id", $term_tax_id, $post, $term_tax_id, $post);
$found = $wpdb->get_results($statement);

Это также имеет преимущество работы, когда есть менее двух терминов отношений до или после центра (объект с идентификатором $post).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...