【问题标题】:Mysql queries - using join/union etcMysql 查询 - 使用 join/union 等
【发布时间】:2017-07-29 20:58:35
【问题描述】:

我的数据库中有 4 个名为 customers 的表(保存他们的个人详细信息以及他们在哪个项目中的哪个房间),payments(保存他们的付款详细信息) project)、projects(保存项目详细信息)和staff(保存员工登录详细信息)

我还有 3 个页面,我需要从所有这些页面获取数据(员工除外 - 一旦他们登录,会话等处理这些),但对于客户、付款和项目,我经常需要数据。

表结构如下;

客户


UID - pID - rID - name - surname - roomtype

付款


UID - pID - total - paid 

项目


pID - name - hotel

至于结果,我想检查谁 (UID) 在同一个项目 (pID) 中住在同一个房间 (rID),并且我想单独检查他们的付款详细信息,无论他们是在单人房还是双人房。

我可以使用哪些查询来获得如下结果,而不会对服务器造成太大压力,同时尽可能减少查询量?

示例;

+-------------------------------------------------------------------+
| rID    UID    pID    name    surname    roomtype    total    paid |
+-------------------------------------------------------------------+
| 1035   1010   301    John    Doe        double      200      200  |
|        1011   301    Jane    Doe        double      200      200  |
| 1036   1012   301    Fred    Nerk       single      150      150  |
+-------------------------------------------------------------------+

编辑:

我已将查询更改为;

$query = "SELECT p1.*,
    p2.total, p2.paid, p2.pmethod, p2.currency, p2.auth, p2.invoice,
    p3.pname, p3.pstartdate, p3.penddate, p3.photel, p3.pcity, p3.pstatus
    FROM customers p1 
    INNER JOIN payments p2 ON p1.UID=p2.UID
    INNER JOIN projects p3 ON p1.pID=p3.pID";
$guests = $mysqli->prepare($query);
$guests->execute();
$guests->store_result();

虽然谈到 $guests->fetch() 我没有得到任何结果。我已经按照@Code-Monk 的建议通过 MYSQL Workbench 检查了查询 - 虽然它选择了行,但它没有选择存储在表中的任何数据,因此不返回任何结果。谁能在这里指出我的错误?

  • 结论 - 显然,我在客户表中的“UID”条目与其他条目不同。所以,现在它可以工作了。非常感谢您帮助我解决这个问题,老实说,您为我节省了很多工作和时间。知道你很了不起,我很感激你抽出时间来帮助我。再次感谢你!向你致敬和良好的业力:)

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    试试这个:

    select p1.*,p2.total,p2.paid,p3.hotel from customers p1 
    inner join payments p2 on p1.uid=p2.uid 
    inner join projects p3 on p1.pid=p3.pid
    

    【讨论】:

    • 我刚刚尝试过,但不幸的是我没有得到任何结果。事实上,在尝试 fetch() 时,它给了我错误“致命错误:在非对象上调用成员函数 fetch()”我现在正试图弄清楚我是否在 bind_results 上犯了错误
    • 首先使用 Mysql Workbench 或您使用的任何其他 DB 客户端尝试查询。如果结果符合预期,则将其放入您的应用程序中。顺便说一句,致命的可能是您的应用程序端发生的错误。
    • 我现在做了,似乎大多数都设置好了并且可以工作,除了我没有得到任何结果。我现在正在查看查询,也许我在此过程中遗漏了一些东西。
    • 任何想法为什么即使存储在数据库中的数据相互匹配,查询也可能不返回任何结果但选择表行? - 我一直在环顾四周,但仍然无法弄清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多