MySQL - 根据用户的选择选择列'名称'列'id'和'parent'中的行彼此相等
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - 根据用户的选择选择列'名称'列'id'和'parent'中的行彼此相等相关的知识,希望对你有一定的参考价值。
当parent = 0表示类别
当parent = 1表示子类别1连接到类别1(id = 1)
当parent = 2表示子类别2连接到类别2(id = 2)
父母......等到19个类别(id = 19,父母= 0)
我需要的是根据用户在类别字段中的选择,将子类别的名称放在子类别表单字段中。类别字段工作正常。
id parent name active
1 0 Arts & Entertainment 0
2 0 Automotive 0
3 0 Business & Professional Serv. 1
4 0 Clothing & Accessories 0
5 0 Community & Government 0
6 0 Computers & Electronics 1
7 0 Construction & Contractors 0
8 0 Education 0
9 0 Food & Dining 0
10 0 Health & Medicine 0
11 0 Home & Garden 0
12 0 Industry & Agriculture 0
13 0 Legal & Financial 1
14 0 Media & Communications 0
15 0 Personal Care & Services 0
16 0 Real Estate 0
17 0 Shopping 0
18 0 Sports & Recreation 0
19 0 Travel & Transportation 0
34 1 Acting Schools 1
35 1 Aerial Photographers 1
36 1 Arcades & Amusements 1
37 1 Art Classes 1
38 1 Art Galleries & Dealers 1
39 1 Art Schools 1
1.这是类别字段的查询工作正常,并给我们用户的选择($ judgePick)
$db->setQuery('SELECT name FROM #__professional_categ WHERE parent=0 AND active=1 ORDER BY name ASC');
2.这是试图解决的子类别字段的查询
$judgePick = JRequest::getVar('category');
$db = JFactory::getDBO();
$db->setQuery('SELECT `name` FROM `#__professional_categ` WHERE active = 1 AND (something here...) ORDER BY parent ASC, name ASC);
$result = $db->loadColumn();
if(!$result){
echo "error";
} else {
echo json_encode($result);
}
假设1 - id包括='。$ db-> quote($ judgePick)
假设2 - 对于父> 0必须等于用户在假设1中选择的id
预期结果
子类别字段只能根据用户在类别字段($ judgePick)中的选择来获取名称,其中用户的选择ID等于父级。换句话说,例如, Arts&Entertainment是类别(parent = 0)并且具有(id = 1),当用户在类别表单字段中选择它时,子类别表单字段应该显示所有名称(parent = 1)
您正在寻找的可能是自我加入:
SELECT x.name
FROM #__professional_categ x
JOIN #__professional_categ y
ON x.parent = y.id
WHERE y.name = ‘. $judgePick .‘
AND x.parent = y.id
AND x.active = 1
你可以在这里检查抽象样本的查询:http://www.sqlfiddle.com/#!9/ecc4bb/1/0
由于代码中的输入只能获得所选类别的名称,因此我们必须在表格中选择其ID,然后我们可以找到并选择子类别的父ID,并根据该名称返回子类别的名称。
在Joomla语法中,您的代码和查询应如下所示:
$jinput = JFactory::getApplication()->input;
$judgePick = $jinput->get(‘category’);
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query
->select('x.name')
->from($db->quoteName('#__professional_categ', 'x'))
->join('LEFT', $db->quoteName('#__professional_categ', 'y') . ' ON ' . $db->quoteName('x.parent') .' = '. $db->quoteName('y.id'))
->where($db->quoteName('y.name') .' = '. $db->quote($judgePick))
->andWhere(array($db->quoteName('x.parent').' = '. $db->quoteName('y.id'), $db->quoteName('x.active').' = 1'), $glue = 'AND')
->order($db->quoteName('x.name') . ' ASC');
// Reset the query using our newly populated query object.
$db->setQuery($query);
$result = $db->loadColumn();
那这个呢
$db->setQuery("SELECT name FROM #__professional_categ WHERE parent=$judgePick AND active=1 ORDER BY name ASC");
以上是关于MySQL - 根据用户的选择选择列'名称'列'id'和'parent'中的行彼此相等的主要内容,如果未能解决你的问题,请参考以下文章
如何根据从下拉列表中选择的 CATEGORY 来控制 NEW/EDIT 视图中的列标题。带有 MYSQL 的 Ruby on Rails