首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MySQL和PHP进行最佳匹配

使用MySQL和PHP进行最佳匹配
EN

Stack Overflow用户
提问于 2012-11-20 07:31:25
回答 2查看 393关注 0票数 2

我正在使用PHP/MySQL处理我的第一个项目,在这个项目中,我有一个城市列表,以及在特定类别(食品、购物等)中1-5的评分。我想要做的是评估每一行(每个城市),当表单提交时,类别是否重要。

这就是我想让它工作的方式。

例如,例如:

  1. 芝加哥食品: 4,购物: 4,夜生活:4
  2. 纽约食品: 4,购物: 5,夜生活:5
  3. 波士顿食品: 5,购物: 4,夜生活:3 (例如收视率)

用户说食物并不重要。因此代码只会评估购物和夜生活..。纽约以10结束,芝加哥以8结束,波士顿以7结束。

因为我有一个大约35-40个城市的列表,我想对每一个类别进行评估(如果用户认为它是“重要的”),最终的赢家将是评估结束时的最高数量。

有没有人想过该怎么做?我的表是用MySQL构建的,上面有所有的评级,现在只需要把代码写出来。

我尝试过的:使用数组引入所有的值,但我发现很难遍历每一行.帮助!

EN

回答 2

Stack Overflow用户

发布于 2012-11-20 07:41:37

您只需一点PHP代码和一个appropiate语句就可以完成此任务。

以下是一个可能的解决方案:

代码语言:javascript
运行
复制
$important_cat = $_POST['categories']; //which is an array
$sql = "SELECT city, sum(".implode(' + ',$important_cat).") AS cat
        FROM tbl
        ORDER BY cat DESC";
//query sql
票数 1
EN

Stack Overflow用户

发布于 2012-11-20 08:52:25

假设数据库表与此类似(至少应该以这种方式标准化):

代码语言:javascript
运行
复制
city ( id, name );
category ( id, name );
rating ( city_id, category_id, rating );

..。与此类似的一系列兴趣:

代码语言:javascript
运行
复制
$interests = array(
    'Food',
    'Shopping'
);

..。以下sql:

代码语言:javascript
运行
复制
$sql = 'SELECT
          city.name as city,
          GROUP_CONCAT( category.name || ": " || rating.rating, ", " ) as ratings,
          SUM( rating.rating ) as totalRating
        FROM
          rating
        JOIN
          city
          ON city.id = rating.city_id
        JOIN
          category
          ON category.id = rating.category_id
        WHERE
          category.name IN( ' . implode( ',', array_map( array( $db, 'quote' ), $interests ) ) . ' )
        GROUP BY
          city.name
        ORDER BY
          totalRating DESC';

(我假设使用http://www.php.net/manual/en/book.pdo.php,利用http://php.net/manual/en/pdo.quote.php在这里转义,但是用mysql库提供的任何引用/转义机制替换回调array( $db, 'quote' ) )

..。将产生类似于此的结果集(我已为我的示例填充了随机评级数据):

代码语言:javascript
运行
复制
array (
  0 => array (
    'name' => 'Chicago',
    'ratings' => 'Food: 3, Shopping: 3',
    'totalRating' => '6'
  ),
  1 => array (
    'name' => 'New York',
    'ratings' => 'Food: 1, Shopping: 4',
    'totalRating' => '5'
  ),
  2 => array (
    'name' => 'Seattle',
    'ratings' => 'Food: 4, Shopping: 1',
    'totalRating' => '5'
  ),
  3 => array (
    'name' => 'Los Angeles',
    'ratings' => 'Food: 2, Shopping: 2',
    'totalRating' => '4'
  ),
  4 => array (
    'name' => 'Boston',
    'ratings' => 'Food: 1, Shopping: 2',
    'totalRating' => '3'
  ),
  5 => array (
    'name' => 'San Francisco',
    'ratings' => 'Food: 1, Shopping: 1',
    'totalRating' => '2'
  )
)

如果只需要第一个结果,请将LIMIT 1追加到sql查询中。

这应该给你一个如何着手完成你想要的东西的想法。

最重要的是:让MySQL完成所有工作(过滤、排序)--而不是PHP。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13468467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档