Как сделать выбор запроса условия

У меня есть такая таблица:

--------------------------------------------
|               category table             |
--------------------------------------------
id   |  name |
--------------------------------------------
1    |  book    |   --->1 digit is a category
11   |  aa      |   --->2 digit is a sub category
2    |  software|
21   |  ba      |
22   |  bb      |
23   |  bc      |

Я хочу, чтобы вывод был таким:

---------------------------------
sub_id  |name_sub |name_category
---------------------------------
11      |aa       |book
21      |ba       |software
22      |bb       |software
23      |bc       |software

выберите все субидентификаторы (2 цифры), имена субидентификаторов и название категории (1 цифра слева)

В общем, это неправильно сформированная таблица. Если вы хотите различать категорию и подкатегорию, определите 2 столбца. Это значительно облегчит жизнь будущим расширениям (а они появятся).

Wiimm 07.04.2019 11:00

Я скопировал модель базы данных из этого github.com/Rizki36/вилая

Rizki Fitra 07.04.2019 13:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
66
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать correlated subquery

select id,
       name as name_sub,
       ( select substring(name,1,1) from tab where id=t.id ) 
       as name_category
  from tab t
 where length(name)=2

Demo

можно ли разделить название таблицы (вкладка t)?

Rizki Fitra 07.04.2019 10:49

@RizkiFitra да, это псевдоним, который представляет таблицу.

Barbaros Özhan 07.04.2019 10:50

@RizkiFitra не проблема :)

Barbaros Özhan 07.04.2019 11:07

Судя по вашим примерам данных, это может быть приемлемым ярлыком:

SELECT id sub_id, name name_sub, LEFT(name, 1) name_category
FROM category
WHERE CHAR_LENGTH(id) = 2

В противном случае вы также можете использовать JOIN:

SELECT c1.id sub_id, c1.name name_sub, c2.name name_category
FROM category c1
INNER JOIN category c2 ON c2.id = LEFT(c1.id, 1)
WHERE CHAR_LENGTH(c1.id) = 2
Ответ принят как подходящий

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

select c1.id as sub_id,c1.name as name_sub ,c2.name as name_category
from category c1
inner join category c2
on cast((c1.id / 10) as UNSIGNED) = c2.id

Демо:https://www.db-fiddle.com/f/qmbYDxpDLvnzUDZ9AU4kTH/0

этот код хорошо работает в моем браузере, но ошибка в моем проекте

Rizki Fitra 07.04.2019 13:09

вывод неверный, функция номер 10 для чего?(c1.id/10)

Rizki Fitra 07.04.2019 13:40

@RizkiFitra Какой результат вы получаете? Это отлично работает в демо, которое я приложил.

nice_dev 07.04.2019 14:45

Да, это работает хорошо, но мне нужно только использовать самосоединение, спасибо

Rizki Fitra 08.04.2019 15:22

Другие вопросы по теме