Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysql中的meta键获取meta值_Php_Mysql_Wordpress - Fatal编程技术网

Php 使用mysql中的meta键获取meta值

Php 使用mysql中的meta键获取meta值,php,mysql,wordpress,Php,Mysql,Wordpress,我在wordpress工作。我要做定制过滤器。在其中,我希望memberId使用metakey 我的桌子结构如下表所示。 参考问题: 我的最后发言如下: select distinct(memberid) from membermetas where memberMeta = 'kilo' and memberMetaValue >= 90 and memberMeta = 'boy' and memberMetaValue <= 175 当我试图写这个查询时,我一无所获

我在wordpress工作。我要做定制过滤器。在其中,我希望memberId使用metakey

我的桌子结构如下表所示。

参考问题:

我的最后发言如下:

select distinct(memberid) from membermetas 
where memberMeta = 'kilo' 
and memberMetaValue >= 90 
and memberMeta = 'boy' 
and memberMetaValue <= 175
当我试图写这个查询时,我一无所获

如何为memberMeta字段上的2或3条件编写获取memberId的查询?您正在查询memberMeta等于kilo和等于boy,这显然永远不会是真的。您可能会寻求一个或多个条件:

select distinct(memberid) from membermetas 
where 
(memberMeta = 'kilo' and memberMetaValue >= 90)
OR
(memberMeta = 'boy' and memberMetaValue <= 175)
您甚至可以将其简化为:

select distinct(memberid) from membermetas 
where (memberMeta = 'kilo' OR memberMeta = 'boy')
AND (memberMetaValue BETWEEN 90 AND 175)

好的,你能提供你的桌子的屏幕截图吗?我这样问是因为你的问题通常不适合wordpress通常的表格结构。我的意思是,除非您在安装wp表时更改它,否则所有的wp表都有前缀wp_uu'tableName'。现在有一个选项可以在安装时更改,大多数人都忽略了这一点

接下来我问这个问题,因为用户表的wordpress结构与此大不相同。用户名、用户名等

上一次我这样问是因为你提供的参考资料从来没有说那是一张wordpress表格

另外,如果您确定查询是正确的,那么您与数据库的连接如何?你在使用PDO、MySQL、MySqlite吗?可能有多种原因无法取得结果


上一个wordpress有一个非常安全的结构,它不仅仅让我们编写一个查询并连接到数据库,如果您在wordpress中这样做,您需要先连接到数据库,然后使用内置函数进行查询、创建新表等。如果你是在wordpress之外做这件事,你可以访问数据库,但是如果你的脚本写得不好,你就把整个网站暴露在注入中

我在下面写了一个查询,它运行得非常好。我的问题是:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,memberid INT NOT NULL
,memberMeta VARCHAR(20) NOT NULL
,memberMetaValue VARCHAR(20) NOT NULL
,UNIQUE(memberid,membermeta)
);

INSERT INTO my_table VALUES
(654, 15,'ulke','Türkiye'),
(653, 15,'eposta','mail@mymail.com'),
(652, 15,'alternatiftel','0000000000'),
(651, 15,'telno','0000000001'),
(650, 15,'kilo','90'),
(649, 15,'boy','175'),
(648, 15,'adsoyad','TestTest'),
(647, 15,'tckimlik','12345678901'),
(655, 15,'yas','23'),
(656, 15,'gozrengi','Elaa');

SELECT memberid 
  FROM my_table
 WHERE (memberMeta = 'kilo' AND memberMetaValue >= 90)
    OR (memberMeta = 'boy' AND memberMetaValue <= 175)
 GROUP 
    BY memberid 
HAVING COUNT(*) = 2;

+----------+
| memberid |
+----------+
|       15 |
+----------+
 select membermetas.memberid from membermetas
 INNER JOIN membermetas as table1 ON  membermetas.memberid = table1.memberid AND table1.memberMeta = 'kilo' AND table1.memberMetaValue >= '90'  
 WHERE membermetas.memberMeta = 'boy' AND membermetas.memberMetaValue >= '175'  

尝试使用括号对您的条件进行分组,从membermetas中选择distinctmemberid,其中memberMeta='kilo'和memberMetaValue>=90,memberMeta='boy'和memberMetaValue您可能会错过表名中的数据库前缀。@MahaDev我已经编写了前缀。这应该是注释,而不是答案。答案应该是回答问题,评论是为了要求更多关于这个问题的信息。我使用了wp_Posteta表,它与给定的表更相似link@ArSeN为了有效地帮助他,需要更多的信息。你可能会盲目地去做一些事情,喜欢浪费自己和其他人的时间,或者你只是喜欢辩论,不管怎样,我都不在乎。我会对这个请求发表评论,但它不让我发表评论。我真的很惊讶,一个愿意通过帮助别人而盲目行走的人竟然能获得400以上的排名。我刚才指出,这里有一个问题是有规则的。无意冒犯。如果我有两个不同memberMeta的memberMetaValue,那么写这个查询,如果我使用and,则不会得到任何结果。这是我的观点,问题是您正在使用and。很抱歉,但是我不完全理解你这句话中的英语。你能详细解释一下吗?也许创建一个演示您的问题的工具会更好!我有两个必填字段,kilo和boy,所以我必须使用and而不是or。我仍然不明白您的意思。同一字段不能同时包含两个精确值。仅在不同的行中,如果您想匹配这些行,您必须使用or.和btw,以及您更新的问题-如何编写查询以获取memberMeta字段上2或3条件的memberId?->这正是我的回答:使用或:
 select membermetas.memberid from membermetas
 INNER JOIN membermetas as table1 ON  membermetas.memberid = table1.memberid AND table1.memberMeta = 'kilo' AND table1.memberMetaValue >= '90'  
 WHERE membermetas.memberMeta = 'boy' AND membermetas.memberMetaValue >= '175'