WHERE 语句 SQL 不工作

WHERE statement SQL not working

我是 SQL 和 PHP 的新手,所以我的知识不足以修复它。

我想在我的长查询中使用 WHERE 语句,但它不起作用...

$db->fetch_object_array("SELECT rooms.*, landing_page.url, config_file.config_name,projects.project_name, room_users.hostcode, room_users.guestcode, room_users.first_name, room_users.last_name, 
                   room_users.active, room_users.configuration, config_active, room_users.user_id, rooms.config_id, room_users.trained, license.id AS licenseid
                FROM slots
            LEFT JOIN rooms
              ON rooms.room_id = slots.room_id
            LEFT JOIN room_users
              ON room_users.room_id = rooms.room_id
            LEFT JOIN config_file
              ON config_file.config_id = rooms.config_id
            LEFT JOIN license
              ON license.id = slots.license_id
            LEFT JOIN projects
              ON license.project_id = rooms.project_id
            LEFT JOIN landing_page
              ON landing_page.project_id = license.project_id
            WHERE slots.license_id IN (SELECT id FROM license WHERE id = '{$_GET['license']}' OR parent_id = '{$_GET['license']}')
            GROUP BY rooms.room_id
            ORDER BY slots.license_id ASC, rooms.room_name ASC");

我想将 rooms_config_active 配置为 GET variable "filtering" 但它不起作用。

我的获取变量:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method='get'><select id="selectActive" name='filtering'>
                <option value="">Please select a option</option>
                <option value="active">Active</option>
                <option value="inactive">Inactive</option>
            </select>Active / Inactive    <input type='submit' name='filter' value="filter"></th>
        </form>

那么我怎样才能使我的过滤 get 变量起作用呢?我想在之后 rooms.config_activeconfig_active

在此先感谢大家!

任何类似的东西:

WHERE config_active = $filterting

但是没用。

如果要在字符串中使用数组,则必须使用 ".." 将它们放入字符串中。只是把 $_GET['license'] 放在那里是行不通的。

$sql = "SELECT rooms.*, landing_page.url, config_file.config_name,projects.project_name, room_users.hostcode, room_users.guestcode, room_users.first_name, room_users.last_name, 
               room_users.active, room_users.configuration, config_active, room_users.user_id, rooms.config_id, room_users.trained, license.id AS licenseid
            FROM slots
        LEFT JOIN rooms
          ON rooms.room_id = slots.room_id
        LEFT JOIN room_users
          ON room_users.room_id = rooms.room_id
        LEFT JOIN config_file
          ON config_file.config_id = rooms.config_id
        LEFT JOIN license
          ON license.id = slots.license_id
        LEFT JOIN projects
          ON license.project_id = rooms.project_id
        LEFT JOIN landing_page
          ON landing_page.project_id = license.project_id
        WHERE slots.license_id IN (SELECT id FROM license WHERE id = '{".$_GET['license']."}' OR parent_id = '{".$_GET['license']."}')
        GROUP BY rooms.room_id
        ORDER BY slots.license_id ASC, rooms.room_name ASC";
$db->fetch_object_array($sql);

检查错误的最好方法是 echo $sql 并手动检查数据库中的语句。

where 子句

WHERE 
slots.license_id IN 
(
SELECT id FROM license WHERE id = '{$_GET['license']}' 
OR parent_id = '{$_GET['license']}'
)

没有意义,你已经加入了license table所以你可以使用条件

where
 ( 
  license.id = '{$_GET['license']}' 
  or license.parent_id = '{$_GET['license']}' 
)

现在添加新的过滤器,它将是

where
 ( 
   license.id = '{$_GET['license']}' 
   or license.parent_id = '{$_GET['license']}' 
 )
 and config_active = '{$_GET['filtering']}'

所以查询变为

SELECT 
rooms.*, 
landing_page.url, 
config_file.config_name,
projects.project_name, 
room_users.hostcode, 
room_users.guestcode, 
room_users.first_name, 
room_users.last_name, 
room_users.active, 
room_users.configuration, 
config_active, 
room_users.user_id, 
rooms.config_id, 
room_users.trained, 
license.id AS licenseid
FROM slots
LEFT JOIN rooms
ON rooms.room_id = slots.room_id
LEFT JOIN room_users
ON room_users.room_id = rooms.room_id
LEFT JOIN config_file
ON config_file.config_id = rooms.config_id
LEFT JOIN license
ON license.id = slots.license_id
LEFT JOIN projects
ON license.project_id = rooms.project_id
LEFT JOIN landing_page
ON landing_page.project_id = license.project_id
where
 ( 
  license.id = '{$_GET['license']}' 
  or license.parent_id = '{$_GET['license']}' 
 )
and config_active = '{$_GET['filtering']}'

GROUP BY rooms.room_id
ORDER BY slots.license_id ASC, rooms.room_name ASC

差不多搞定了..

SELECT rooms.*, landing_page.url, config_file.config_name,projects.project_name, room_users.hostcode, room_users.guestcode, room_users.first_name, room_users.last_name, rooms.config_active,
                   room_users.active, room_users.configuration, room_users.user_id, rooms.config_id, room_users.trained, license.id AS licenseid
                FROM slots
            LEFT JOIN rooms
              ON rooms.room_id = slots.room_id
            LEFT JOIN room_users
              ON room_users.room_id = rooms.room_id
            LEFT JOIN config_file
              ON config_file.config_id = rooms.config_id
            LEFT JOIN license
              ON license.id = slots.license_id
            LEFT JOIN projects
              ON license.project_id = rooms.project_id
            LEFT JOIN landing_page
              ON landing_page.project_id = license.project_id
            WHERE slots.license_id IN (SELECT id FROM license WHERE id = 6 OR parent_id = 6) AND rooms.config_active = 1 // or the variable :)
            GROUP BY rooms.room_id
            ORDER BY slots.license_id ASC, rooms.room_name ASC

感谢支持!

使用变量 GET 它不起作用.. 它只给出非活动结果/