Ограничьте до 10 идентификаторов из таблицы 1 и получите все записи из таблицы 2, которые соответствуют идентификаторам таблицы 1

У меня есть таблица1, например:

orderID userId orderName orderTime...
1         11
2.        12
3.        11
4.        14
5.        11
6.        13
7.        11
8.        15
9.        16
10.       11
...      ...

У меня есть другая таблица table2:

table2ID orderID item    price ....
101       1       Apple   1.99
102       1       Banana  2.99
103       1       Grapes  0.99
104       4       pizza   6.99
105       4       drink   0.99
105.      3       chicken 1.99
106.      3       apple   1.99

Я пробовал это:

SELECT a.*, b.* FROM `table1` a
    RIGHT JOIN table2 b on a.orderID = b.orderID 
    WHERE a.userID = 11 order by a.`orderTime` DESC LIMIT 25;

Я хочу получить до 10 уникальных идентификаторов заказов из таблицы 1 пользователя 11 и все детали этих 10 идентификаторов из таблицы 2. Если я сделаю LIMIT 25, я не получу всю информацию. Я хочу, чтобы мой вывод был следующим:

orderID userId orderName orderTime... table2ID orderID item    price 
 1        11                            101       1    Apple   1.99
 1        11                            102       1    Banana 2.99
 1        11                            103       1    Grapes  0.99
 3        11                            105       3    chicken 1.99
 3        11                            106       3     apple   1.99

Подумайте о своей логике. Ваш запрос объединяет 2 таблицы, затем выберите 10. Вам нужно выбрать 10 из таблицы 1, а затем получить все записи для 10 записей из таблицы 1.

Eric 28.05.2019 18:21
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
SELECT a.*, b.*
FROM ( SELECT *
       FROM a
       WHERE a.userID = 11
       LIMIT 10) as a
JOIN b
  ON a.orderID = b.orderID 

Спасибо, @Juan Carlos.. Таким образом, я получаю то, что хотел.. Я хочу получить последние 10 записей.. SELECT a.*, b.* FROM ( SELECT * FROM a WHERE a.userID = 11 order by a .orderTime DESC LIMIT 10) как JOIN b ON a.orderID = b.orderID Если я это сделаю, я ничего не получу.

Amrita Sapkota 28.05.2019 18:16

Это странно. Попробуйте сначала SELECT * FROM a WHERE a.userID = 11 order by a.orderTime DESC LIMIT 10

Juan Carlos Oropeza 28.05.2019 18:20

Да, это сработало. Но загрузка занимает так много времени.. Так что я ищу это.. Большое спасибо за вашу помощь.

Amrita Sapkota 28.05.2019 19:00

У вас есть индекс для идентификатора пользователя? Составной идентификатор таблицы A (userid, orderTime) может помочь

Juan Carlos Oropeza 28.05.2019 19:01

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