0

以下是表格:

表用户:

User_Id = 1,2,3;
User_Name: A,B,C;

餐桌业务:

Business_Id = 1,2,3;
Business_Name: A,B,C;
Business_Detail: Details_A, Details_b, Details_c; 

餐桌访问:

Visit_Id = 1,2,3,4,5,6:
User_Id = 1,1,1,2,1,1;
Business_Id = 1,1,1,2,2,3;

我需要创建一个函数来返回访问列表和有关用户访问的业务的信息。到目前为止,我已经获得了用户访问过的商店的列表,但不知道从那里去哪里。

 function visit_count($user_id=1){
     global $database;
     $sql = "SELECT * FROM visits WHERE user_id ='{$user_id}' LIMIT 0 , 30";
     $result_set = $database->query($sql);
     $visits = mysql_fetch_array($result_set);

     //Get the unique ids of the business

    //Run another query that has the business information

    //combing both queries.

 }

感谢你们的快速反应。这几乎是我正在寻找的东西我想我正在寻找返回对象的查询,如下所示:

Object:
  - Business:
     - Business_id;
     - Business_name;
     - Visit_counts;
  - Business:
     - Business_id;
     - Business_name;
     - Visit_counts;

所以基本上该对象将具有业务信息和用户访问商店的次数。

非常感谢所有的帮助

4

4 回答 4

0

你需要加入:

SELECT v.*, b.Business_Name, b.Business_Detail FROM visits as v 
JOIN Business as b on b.Business_Id = v.Business_Id
WHERE v.user_id ='{$user_id}' LIMIT 0 , 30

另外 - 使用 mysqli 并确保您正在清理您的输入

编辑

遵循@KHMKShore 关于使用准备好的语句的建议。

于 2013-09-26T22:15:42.297 回答
0

好吧,首先您应该查看准备好的语句,这是当前在 PHP 中使用 sql 的最佳实践。

听起来你需要的是加入。

$sql = "SELECT * FROM visits v
        JOIN business b ON b.Business_Id = v.Business_Id
        JOIN user u ON u.Business_Id = v.Business_Id
        WHERE v.user_id ='{$user_id}' LIMIT 0 , 30";
于 2013-09-26T22:19:59.590 回答
0
SELECT Visits.* , Business.Business_Name, Business.Business_Details
FROM Visits 
LEFT JOIN Business on Business.Business_Id  = Visits.Business_Id 
WHERE Visits.User_Id =1

为每个用户尝试此 SQL

于 2013-09-26T22:22:43.820 回答
0

尝试以下 SQL 代码:

SELECT business.business_id, business.business_name, COUNT(business.business_id) AS visit_counts
FROM business 
  LEFT JOIN visits
  ON business.business_id = visits.business_id
GROUP BY business_id, user_id

结果:

business_id |business_name |visit_counts
1            A              3
2            B              1
2            B              1
3            C              1
于 2013-09-26T23:54:56.563 回答