php - MySQL - 根据用户的选择选择列 'Name' 其中列 'id' 和 'parent' 中的行彼此相等

标签 php mysql joomla mariadb breezingforms

当parent = 0表示类别

当parent = 1时表示subcategory 1连接到category 1(id​​=1)

当parent = 2时表示subcategory 2连接到category 2(id=2)

当 parent...等直到 19 个类别(id=19 with parent=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.这是试图解决的子类别字段的Query

$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();

关于php - MySQL - 根据用户的选择选择列 'Name' 其中列 'id' 和 'parent' 中的行彼此相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878834/

相关文章:

php - MySQL + PHP : fetching data using foreign keys

javascript - 订单/交易/充电方连接

php - 在 php 中加载 dll 的最佳方法是什么?

php - JQuery ajax 函数可以工作,但无法正确返回变量

SQL:有关 sql 连接的帮助

mysql - SQL 查询 INNER JOIN 与三个表

php - 此代码是否受到 SQL 注入(inject)保护?

php - 编辑 Joomla 3.x "User Registration"表单文本

用于获取 Joomla 用户及其配置文件字段的 MySQL 查询

php - 当应用程序池使用 'ApplicationPoolIdentity' 时,IIS 8.5 使用什么用户帐户?