Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按最常见的类别(Mysql、Php)选择顺序_Php_Mysql_Sql - Fatal编程技术网

按最常见的类别(Mysql、Php)选择顺序

按最常见的类别(Mysql、Php)选择顺序,php,mysql,sql,Php,Mysql,Sql,我的Mysql数据库中有两个表: 第一篇:文章: Id | page_title | description ------------------------------------- 1 | Bob Dylan | Lorem Ipsum.. 2 | Paul Mccartney | Lorem Ipsum.. 3 | John Lennon | Lorem Ipsum.. 4 | Pierce Brosnan | Lorem Ipsum.

我的Mysql数据库中有两个表:

第一篇:
文章

 Id |    page_title   | description 
-------------------------------------
  1 | Bob Dylan       | Lorem Ipsum..
  2 | Paul Mccartney  | Lorem Ipsum..
  3 | John Lennon     | Lorem Ipsum..
  4 | Pierce Brosnan  | Lorem Ipsum..
  5 | Microsoft       | Lorem Ipsum..
  6 | Apple           | Lorem Ipsum..
  7 | Google          | Lorem Ipsum..
  8 | Steve Jobs      | Lorem Ipsum..
  9 | Neil Young      | Lorem Ipsum..
 Id |     page_id     | category_name
-------------------------------------
  1 | 1               | musician
  2 | 2               | beatles_member
  3 | 3               | beatles_member
  4 | 5               | company
  5 | 6               | company
  6 | 7               | company
  7 | 8               | entrepreneur
  8 | 9               | guitarist
  9 | 2               | pianist
 10 | 4               | actor
 11 | 4               | jamesbond_actor
 12 | 8               | apple_ceo
 13 | 2               | musician
第二类
类别

 Id |    page_title   | description 
-------------------------------------
  1 | Bob Dylan       | Lorem Ipsum..
  2 | Paul Mccartney  | Lorem Ipsum..
  3 | John Lennon     | Lorem Ipsum..
  4 | Pierce Brosnan  | Lorem Ipsum..
  5 | Microsoft       | Lorem Ipsum..
  6 | Apple           | Lorem Ipsum..
  7 | Google          | Lorem Ipsum..
  8 | Steve Jobs      | Lorem Ipsum..
  9 | Neil Young      | Lorem Ipsum..
 Id |     page_id     | category_name
-------------------------------------
  1 | 1               | musician
  2 | 2               | beatles_member
  3 | 3               | beatles_member
  4 | 5               | company
  5 | 6               | company
  6 | 7               | company
  7 | 8               | entrepreneur
  8 | 9               | guitarist
  9 | 2               | pianist
 10 | 4               | actor
 11 | 4               | jamesbond_actor
 12 | 8               | apple_ceo
 13 | 2               | musician
现在我有一篇文章,例如
paulmccartney
,带有
id2
。 他的类别是
(音乐家、钢琴家、披头士成员)
。 在这个例子中,更多的原因是页面大小

现在我想从
articles
表中获得5篇其他文章,它们具有最常见的类别。在这个例子中,上面的3

我尝试用mysql做到这一点是:

$categories = "'musician', 'pianist', 'beatles_member'";
SELECT*FROM articles a LEFT JOIN categories c ON c.page\u id=a.id其中c.categories\u name IN($categories)限制5


但是有了这些,我就得到了包含保罗·麦卡特尼(Paul McCartney)所有类别的文章(通常不超过3个结果)。我想要的文章有最常见的类别。有人有想法吗?

使用
分组方式和
拥有
的简单解决方案:

SELECT p.*
FROM pages p
LEFT JOIN categoires c ON c.page_id = p.id
WHERE c.category_name IN (%categories%)
GROUP BY p.page_id
HAVING COUNT(c.id) = %number_of_categories%
粘贴类别列表而不是
%categories%
,粘贴类别数量而不是
%number\u of_categories%


因此,您将得到一个包含所有指定类别的页面列表。如果某个页面在
%categories%
列表中至少没有一个类别,那么它将被排除在选择之外,因为
计数(c.id)=%number\u of_categories%
条件。

使用
GROUP BY
&
的简单解决方案:

SELECT p.*
FROM pages p
LEFT JOIN categoires c ON c.page_id = p.id
WHERE c.category_name IN (%categories%)
GROUP BY p.page_id
HAVING COUNT(c.id) = %number_of_categories%
粘贴类别列表而不是
%categories%
,粘贴类别数量而不是
%number\u of_categories%


因此,您将得到一个包含所有指定类别的页面列表。如果某个页面在
%categories%
列表中至少没有一个类别,那么它将被排除在选择之外,因为
计数(c.id)=%number\u of_categories%
条件。

您必须对表中包含的最常见类别进行子查询

SELECT * FROM articles a LEFT JOIN categories c ON c.page_id = a.Id WHERE c.category_name IN (SELECT category_name FROM categorie [...]  LIMIT 3 ) LIMIT 5

我不想替你做所有的工作。

你必须对表中最常见的类别进行子查询

SELECT * FROM articles a LEFT JOIN categories c ON c.page_id = a.Id WHERE c.category_name IN (SELECT category_name FROM categorie [...]  LIMIT 3 ) LIMIT 5

我不想在你的位置上做所有的工作。

请定义最常见的。下面的查询将为您提供最常见的类别<代码>从类别分组中按类别名称选择类别名称、计数(*)
或者您是否正在寻找一种方法,根据您提供的输入类别对每个类别进行排序?有点像marketbasket分析。请定义最常见的。下面的查询将为您提供最常见的类别<代码>从类别分组中按类别名称选择类别名称、计数(*)
或者您是否正在寻找一种方法,根据您提供的输入类别对每个类别进行排序?有点像marketbasket分析。注意
左连接c。。。其中c与内部连接c相同。
请注意,
左连接c。。。其中c与内部连接c相同。