php - SELECT 在另一个表中被引用少于 x 次的行

标签 php mysql

在 MySQL 中,我有两个表,我的可预订的“周末”:

id bigint(20) unsigned,
label varchar(64),
date_start date,
max_attendees smallint(5) unsigned

我的与会者:

id bigint(20) unsigned,
name varchar(64),
email varchar(255),
weekend bigint(20) unsigned

我想选择参加人数少于 max_attendees 的所有周末。这包括有 0 参加者的周末。

注意:我还需要忽略 ID 为“1”的周末

目前,这适用于 PHP(我使用 Wordpress 进行 mysql 访问),如下所示:

$weekends = $wpdb->get_results("SELECT * FROM $weekends_table
                                   WHERE id <> 1", ARRAY_A);

$open_weekends = array();

foreach ($weekends as $weekend) {
    $id = $weekend['id'];
    $attendees = $wpdb->get_row("SELECT COUNT(id) as attendees
                                    FROM $attendees_table
                                    WHERE weekend = $id", ARRAY_A);

    if ( $attendees['attendees'] < $weekend['max_attendees'] ) {
        $weekend['attendees'] = $attendees['attendees'];
        $open_weekends[] = $weekend;
    }
}

我不应该能够在没有 PHP 的情况下在 MySQL 中执行此操作吗?我对 MySQL 的了解还没有那么远。您能建议一个查询吗?

最佳答案

使用HAVING条款

这尚未经过测试,因此您可能需要使用它,但要点如下:

SELECT w.*, COUNT(a.name)
FROM weekend w
LEFT JOIN attendees a
  ON w.id = a.weekend
WHERE w.id <> 1
GROUP BY w.id
HAVING (COUNT(a.name) < w.max_attendees) OR (COUNT(a.name) IS NULL)

关于php - SELECT 在另一个表中被引用少于 x 次的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955200/

相关文章:

php - 使用 PHP CURL 显示 PDF 文件只会产生奇怪的文本

php - 从 2 个表中获取数据的最佳 Yii 方法是什么?

java - 使用乐观锁定时的 Hibernate/MySQL LockTimeoutException

php - foreach循环与mysql链接表

php,如何调用javascript函数?

php - HTTP 请求失败! HTTP/1.0 403 禁止

php - 输入按钮仅在选中时才上传,使其成为必需

php - 使用 PHP session 连接到 MySQL

mysql - 为什么需要在数据库中显式指定外键和引用?

php - Mysql REPLACE 不工作