【问题标题】:PHP "array query" / multiple queriesPHP“数组查询”/多个查询
【发布时间】:2017-04-30 07:28:02
【问题描述】:

我有一个 mysql 表,我喜欢在其中执行查询。我的表格如下所示:

日期活动金额 -------- ------ -------- 第 1 天 喝 0 第 1 天 吃 1 第 1 天呼吸 1 第 2 天 喝 0 第 2 天 吃 0 第 2 天呼吸 0 第 3 天 喝 1 第 3 天呼吸 0 第 4 天 吃 1 等等 等等 等等

我想做的是看看什么时候吃是 1,对于事实,我想显示那些日子的所有活动

//我现在正在做的是: $activityarray = 数组(); $result = mysql_query("SELECT * FROM table WHERE activity='eat' AND amount='1'"); $row = mysql_fetch_assoc($result); //这将返回所有活动=吃和数量=1的行 做{ //为每个结果行执行一个新查询;从第一个查询中查找 'date'=$row[date] 并显示当天完成的所有活动 (activity=1) $result2 = mysql_query("SELECT * FROM table WHERE date='".$row[date]."'"); $row2 = mysql_fetch_assoc($result2); 做{ array_push($activityarray,$row2['activity']); }while($row2 = mysql_fetch_assoc($result2)); }while($row = mysql_fetch_assoc($result)); print_r($activityarray);

由于每天有数千天和数十个活动,这对我来说似乎不是最有效的方法。有没有一种方法可以让我通过一个查询更有效地做到这一点? (所以:检查吃=1 天的所有活动)。 希望有人能帮帮我!

【问题讨论】:

  • 类似SELECT * FROM table WHERE day =(select day from where activity='eat' AND amount='1')的东西
  • @Dagon 那应该是WHERE day IN ...
  • 啊,是的,虽然很快
  • 为什么要存储零(以及,通过扩展,零)?
  • 还有 mysql_?啊啊啊

标签: php mysql sql


【解决方案1】:

使用自联接:

SELECT t1.*
FROM table AS t1
JOIN table AS t2 ON t1.date = t2.date
WHERE t2.activity = 'eat' AND t2.amount = 1

【讨论】:

  • 当我尝试这样做时,我收到以下消息: SELECT 将检查超过 MAX_JOIN_SIZE 行;检查您的 WHERE 并使用 SET SQL_BIG_SELECTS=1 或 SET MAX_JOIN_SIZE=# 如果 SELECT 没问题
  • 尝试在date 列上添加索引。
  • 我该怎么做? de query 变成了怎样的样子?
  • 它不会改变查询。您可以使用CREATE INDEXALTER TABLE 命令向表中添加索引。阅读语法手册。
  • @mh3982 你应该接受解决问题的答案。
【解决方案2】:

我的建议,尤其是如果您有连接大小限制:

select *
from table as t1
where exists (
    select 1
    from table as t2
    where t2.date = t1.date
    and t2.activity = 'eat'
    and t2.amount = 1
    )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2015-10-20
    • 2018-03-15
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多