Php 使用mysql中的meta键获取meta值
我在wordpress工作。我要做定制过滤器。在其中,我希望memberId使用metakey 我的桌子结构如下表所示。 参考问题: 我的最后发言如下: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 当我试图写这个查询时,我一无所获
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'