PHP/MYSQL:SELECT语句,多个WHERE's,从数据库填充
我试图找出如何让select语句由不断变化的where数填充。这适用于订单状态跟踪应用程序 基本上,想法是我们公司的用户客户登录,可以看到他/她的订单,检查状态等。没有问题。当该用户需要与多个公司关联时,就会出现问题。比如说他们工作或拥有两个不同的公司,或者他们为一家拥有多个子公司的公司工作,每个子公司单独订购,但大人物需要看到所有公司订购的所有东西。这就是我遇到问题的地方。我似乎想不出一个好办法来实现这一点。我唯一想到的是: 注意,前面代码中的客户机指的是用户的公司,因此我们的客户机 放在数据库“我的用户”表中名为“公司”的列中。这就被称为: 问题是,虽然这样做有效,但我似乎无法使PHP加载项在client='and'和hidden='0'中正确运行。另外,这有点麻烦PHP/MYSQL:SELECT语句,多个WHERE's,从数据库填充,php,mysql,select,where,Php,Mysql,Select,Where,我试图找出如何让select语句由不断变化的where数填充。这适用于订单状态跟踪应用程序 基本上,想法是我们公司的用户客户登录,可以看到他/她的订单,检查状态等。没有问题。当该用户需要与多个公司关联时,就会出现问题。比如说他们工作或拥有两个不同的公司,或者他们为一家拥有多个子公司的公司工作,每个子公司单独订购,但大人物需要看到所有公司订购的所有东西。这就是我遇到问题的地方。我似乎想不出一个好办法来实现这一点。我唯一想到的是: 注意,前面代码中的客户机指的是用户的公司,因此我们的客户机 放在数据
有什么想法吗?提前谢谢 您可以使用IN关键字
client IN('client1','client2',...)
扩展Tim的答案,您可以使用和: 或者,您可以尝试: 联接是首选的方法。在其他原因中,它可能是最有效的,尽管你应该用它来测试。您可能不应该获取所有表列的信息。*以防以后更改表定义;我把它放进去是因为我不知道你想要哪一列 另一个不相关的注意事项是,研究对或驱动程序使用准备好的查询。当您多次执行查询时,准备好的查询效率更高,而且无需清理用户输入 关系方法涉及如下表:
CREATE TABLE mtc_users (
username PRIMARY KEY,
-- ... other user info
) ENGINE=InnoDB;
CREATE TABLE companies (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR() NOT NULL,
-- ... other company info
) ENGINE=InnoDB;
CREATE TABLE co_members (
username NOT NULL,
company NOT NULL,
FOREIGN KEY (`username`) REFERENCES mtc_users (`username`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`company`) REFERENCES companies (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
INDEX (`username`, `company`)
) ENGINE=InnoDB;
如果公司名称是唯一的,您可以将其用作主键,而不是id字段。co_成员是一个不好的名字,但员工和股东似乎不太合适。随着您对系统更加熟悉,您将能够想出一个更合适的名称。这似乎不起作用。应该注意的是,它所比较的列在orders表中只有一个客户的名称。这样做的目的是向用户显示来自客户1、客户2和客户3的所有订单,依此类推。然而,我找不到一个mysql页面在中谈论,但它是一个非常流行的词…Doc for IN operator:company列中的公司应该如何在数据库中的mtc_用户中进行布局?该表应该包含usercompany关系,每个用户所属的公司都有一行。如果mtc_用户为每个用户保留用户属性1行,则创建一个新表并使用该表。在本例中,简化为一条SQL语句是一种方法。在其他情况下,可以使用内爆从序列生成字符串:client='。内爆'OR client=',分解',',$clientnames'和隐藏=0
client IN('client1','client2',...)
SELECT *columns* FROM info
WHERE hidden='0' AND client IN
( SELECT company FROM co_members
WHERE username=?
)
ORDER BY ...
SELECT info.* FROM info
JOIN co_members ON info.client = co_members.company
WHERE co_members.username=?
AND hidden='0'
ORDER BY ...
CREATE TABLE mtc_users (
username PRIMARY KEY,
-- ... other user info
) ENGINE=InnoDB;
CREATE TABLE companies (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR() NOT NULL,
-- ... other company info
) ENGINE=InnoDB;
CREATE TABLE co_members (
username NOT NULL,
company NOT NULL,
FOREIGN KEY (`username`) REFERENCES mtc_users (`username`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`company`) REFERENCES companies (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
INDEX (`username`, `company`)
) ENGINE=InnoDB;