Drupal & PHP/MySQL:如何将字段与当前用户的字段进行比较?

Posted

技术标签:

【中文标题】Drupal & PHP/MySQL:如何将字段与当前用户的字段进行比较?【英文标题】:Drupal & PHP/MySQL : How to compare fields with current user's field? 【发布时间】:2011-07-22 22:18:31 【问题描述】:

我有个问题,关于drupal中的php语法/mysql

假设 userA 创建了一个名为“test”的内容类型,他在字段field_example 中填充了值“xxx”。之后,另一个用户 userB 创建了另一个内容,并用相同的值“xxx”填充了相同的字段field_example

我想知道如何仅使用创建的节点显示视图,其中 field_example 字段与当前用户相同?我正在使用的内容类型“测试”中没有(而且我不想要)用户引用。

我查看了 View PHP Filter,但我想知道如何比较字段的值?这是我的尝试 [我不是 PHP 专家,你可能会注意到 :) ] :

<?php

$a="SELECT uid FROM users WHERE uid=%d";

/* ??? How to create $b which can get value of field_example from content_type_test from current user which is logged in ? */

$b="";

$c="SELECT field_example FROM content_type_test";

if ($b==$c)
echo "Ok, I've what I want :) ";


?>

任何帮助将不胜感激,因为我一直在寻找有关此查询的信息...

谢谢大家:)

【问题讨论】:

【参考方案1】:

我没有 Views 模块解决方案。

想到的一个想法是,如果用户 A 提交多个节点,那么您会使用哪个示例值?另外,您使用的是什么版本的 Drupal?

假设用户只会提交一个这种类型的内容并且您正在运行 Drupal 6(我从代码示例中猜测),那么它可能看起来像这样:

<?php
// current user
global $user;
// select this user's node
$nid = db_result(db_query("SELECT nid FROM node WHERE type = 'my_content_type' AND status = 1 AND uid = %d", $user->uid));
// if this node loads fine, then proceed with the rest
if ($node = node_load($nid)) 
  // find nodes with the same example value, which do not belong to the current user
  $result = db_query("SELECT nid FROM node
                        INNER JOIN content_type_test ctt ON n.vid = ctt.vid
                        WHERE n.status = 1 AND ctt.field_example_value = '%s' AND uid <> %d
                        ORDER BY n.created DESC", $node->field_example[0]['value'], $user->uid);
  // loop through results
  while ($row = db_fetch_object($result)) 
    $node = node_load($node->nid);
    // append the teaser output (if this is what you want to do)
    $output .= node_view($node, TRUE);
  
  // print the output
  print $output;

else 
  print t('No other content found.');

?>

如果用户提交的内容类型不止一种,那么这将是避免在这里写小说的另一个答案。有几种方法可以解决这个问题。

如果这是 Drupal 7,我也会使用不同的功能。

【讨论】:

嘿Coder1,非常感谢您的回答,我会检查它是否有效:) 我正在使用drupal 6。关于您的问题,您的假设是正确的,我创建了一个规则禁止用户创建超过 1 个内容。 另外,你能告诉我uid和%d之间的“”是什么吗? 是“不等于”。这使得您可以获得当前用户不拥有的节点。即刚刚创建的节点。【参考方案2】:

我假设你想要这样的东西:

function _get_list() 
global $user; // This is global variable, contains information for current logged in user.

$results = db_query("SELECT ctt.field_example FROM node n JOIN content_type_test ctt ON n.nid = ctt.nid AND n.vid = ctt.vid WHERE n.uid = %d", $user->uid);

while($row = db_fetch_object($results))
   //$row->nid.. etc..



【讨论】:

感谢您的回答 minnur !实际上问题出在 WHERE 中,因为我想从 ctt.field_example 中选择与当前用户在 ctt.field_example 中具有相同值的字段。从现在开始,如果我输入 SELECT ctt.field_example FROM node n JOIN content_type_test ctt ON n.nid = ctt.nid AND n.vid = ctt.vid,我就有了整列。那么如何在此列中选择与登录用户字段相同的字段?非常感谢:)

以上是关于Drupal & PHP/MySQL:如何将字段与当前用户的字段进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

Drupal:如何动态设置活动菜单项

在 Drupal 7 中向表单添加文本(只是文本!)[关闭]

运行 Drupal 项目

php与mysql表中如何求递归求和汇总?

如何从drupal寻呼机进行ajax调用

Nginx 上 Drupal 的 AMP 参数错误