【问题标题】:PHP MySQL displaying messages according to multiple conditionsPHP MySQL根据多个条件显示消息
【发布时间】:2011-11-04 00:30:11
【问题描述】:

我正在开发一个 php/mysql 项目,但发现很难继续前进。这是我的情况:

我有两个表第一个是“用户”,第二个是“消息”。表 1 包含用户 ID、性别、年龄、城市和国家。第二个表包含 messageid,message,gender,minimum_age,maximum_age,city 和 country。

现在我想要实现的是向遵循消息表中所有条件的用户显示特定消息。例如:

如果我在消息表中给出条件,例如

==========================================================================
messageid || message    || gender || minimum_age || maximum_age || city || country

1            Messages 1    male      20             30             london  UK
2            Messages 2    female    ANY            40             gurgaon IN

我的年龄是 24 岁,性别是男性,城市是“伦敦”,国家是英国。然后我会在页面上看到消息“消息 1”。如果没有条件匹配,那么我将看到任何消息。

注意:有些用户在用户数据库中没有年龄、城市、国家或性别。

我需要 mysql 查询方面的帮助或完成这项任务的最佳技术。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    一种方法是在 SQL 查询中使用 WHEREJOIN

    【讨论】:

      【解决方案2】:
      SELECT u.userid, u.gender, u.age, u.city, u.country, m.messageid,
         m.minimum_age, m.maximum_age, m.city, m.country 
      FROM users u, message m 
      WHERE u.gender = m.gender and u.age between m.minimum_age and m.maximum_age 
           and u.city = m.city and u.country = m.country
      

      类似的东西。

      然后检查结果集,如果为空,则更改查询以选择所有消息

      【讨论】:

      • 你想要的是 table.field,而不是 field.table。此外,JOIN 可能更有效。
      • 是的,确实已修复。那有点蹩脚。关于 JOIN,我想说这取决于作者如何创建查询。有时我发现在不涉及 JOIN 的情况下在表之间创建动态查询更容易,除非存在性能问题。他也可以使用准备好的语句。
      • 我有大约 200,000 个用户,并且每秒访问网站,许多用户没有在表格中指定城市或国家或性别或年龄。我的意思是他们还没有填写他们的个人资料。现在,如果您的查询在一个条件下为空,如何切换到下一个条件..逻辑是什么??
      • 如果条件之一为假,预期的结果集是什么?你应该显示消息还是不显示?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2016-10-26
      • 2020-05-22
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多