MySQL - выберите столбец «Имя» в соответствии с выбором пользователя, где строки в столбце «id» и «parent» равны друг другу - PullRequest
1 голос
/ 27 апреля 2019

Когда родитель = 0 означает категорию

Когда родитель = 1 означает подкатегорию 1, связанную с категорией 1 (id = 1)

Когда родитель = 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. Это запрос для поля категории, который отлично работает и дает нам выбор пользователя ($ judPick)

$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 - идентификатор для включения = '. $ Db-> quote ($ judPick)

Предположение 2 - для родителя> 0 должно быть равно идентификатору выбора пользователя в предположении 1

Ожидаемый результат

Поле подкатегории, имеющее ТОЛЬКО имена в соответствии с выбором пользователя в поле категории ($ judPick), где идентификатор выбора пользователя равен родительскому. Другими словами, например, Arts & Entertainment - это категория (parent = 0), которая имеет (id = 1), и когда пользователь выбирает ее в поле формы категории, в поле формы подкатегории должны отображаться все имена с (parent = 1)

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

То, что вы ищете, вероятно, является самостоятельным соединением:

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

Так как с помощью ввода в вашем коде вы получаете только название выбранной категории, поэтому мы должны выбрать в таблице ее идентификатор , затем мы можем найти и выбрать родительский идентификатор подкатегории и, основываясь на этом, вернутьимена подкатегорий.

В синтаксисе 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();
0 голосов
/ 27 апреля 2019

Как насчет этого

$db->setQuery("SELECT name FROM #__professional_categ WHERE parent=$judgePick AND active=1 ORDER BY name ASC");
...