1

Тема: Sql запит у Asp.net

У менt така проблема.
Із бази даних потрібно вибрати останні діалоги з друзями і останні діалогиз людьми, що не є друзями та інформацію про цих людей. Також посортувати всі діалоги по даті.
Для цього в базі даних є 3 таблиці:
1. Таблиця смс що складається з наступних полів: номер смс, текст, дата відправки, айді відправника, айді одержувача
2. Таблиця друзів що складається з таких полів: мій номер, номер друга
3. Таблиця користувачів ( номер логін ітд)

Я вирішив це питання таким способом (для вибірки останніх діалогів тільки з друзями)
1. Вибираю всі смс що я відправив
2. В циклі перевіряю співрозмовника (друг чи не друг), якщо друг - зберігаю в список
3. Вибираю смс написані мені
4. В циклі перевіряю співрозмовника (друг чи не друг), якщо друг то зберігаю в список
5. Сортую отриманий список по даті (виключаю вже добавлених співрозмовників)

Мій алгоритм виконується дуже довго через кількість смс і людей. Підскажіть, Будь-ласка, як можна оптимізувати? MS SQL база даних.

2

Re: Sql запит у Asp.net

а якщо просто  зробити 2 селекта, або обєднати 2 різних селекта (union)

3

Re: Sql запит у Asp.net

Як це зробити двома селектами?

4

Re: Sql запит у Asp.net

Ви в результаті повинні два окремих списки одержати? Один - смс Ваші з друзями, другий - Ваші з недрузями?

5 Востаннє редагувалося mich_retten (18.06.2015 14:01:21)

Re: Sql запит у Asp.net

MegaMosk написав:

2. Таблиця друзів що складається з таких полів: мій номер, номер друга

"Мій" що означає? Мається на увазі "номер першого друга, номер другого друга"?
"Я" можу у цій таблиці друзів бути як першим, так і другим?

6 Востаннє редагувалося mich_retten (18.06.2015 14:18:31)

Re: Sql запит у Asp.net

Не зовсім зрозумів, про що йдеться, але можна за основу взяти щось на зразок:

SELECT * FROM sms WHERE from = 'me' AND to IN (SELECT second FROM friends WHERE first = 'me' UNION SELECT first FROM friends WHERE second = 'me') ORDERED BY datetime

Думаю, одержите список усіх смс, де 'я' у полі одного з листувачів, а у іншому - хтось з друзів цього 'я'.

оооооооопс! Не дописав. Тут - тільки ті відбираються, где я - відправник. Доповніть самі, може це - взаґалі не те, що Ви шукаєте.

7 Востаннє редагувалося MegaMosk (18.06.2015 15:24:18)

Re: Sql запит у Asp.net

mich_retten написав:
MegaMosk написав:

2. Таблиця друзів що складається з таких полів: мій номер, номер друга

"Мій" що означає? Мається на увазі "номер першого друга, номер другого друга"?
"Я" можу у цій таблиці друзів бути як першим, так і другим?

Ні в таблиці знаходяться записи мій номер і номер мого друга (пара друзів).

mich_retten написав:

Ви в результаті повинні два окремих списки одержати? Один - смс Ваші з друзями, другий - Ваші з недрузями?

Так потрібно 2 списки.

8

Re: Sql запит у Asp.net

mich_retten написав:

Не зовсім зрозумів, про що йдеться, але можна за основу взяти щось на зразок:

SELECT * FROM sms WHERE from = 'me' AND to IN (SELECT second FROM friends WHERE first = 'me' UNION SELECT first FROM friends WHERE second = 'me') ORDERED BY datetime

Думаю, одержите список усіх смс, де 'я' у полі одного з листувачів, а у іншому - хтось з друзів цього 'я'.

оооооооопс! Не дописав. Тут - тільки ті відбираються, где я - відправник. Доповніть самі, може це - взаґалі не те, що Ви шукаєте.


мені потрібно тільки останні смс, а не всі...

9 Востаннє редагувалося mich_retten (18.06.2015 15:53:52)

Re: Sql запит у Asp.net

MegaMosk написав:

Ні в таблиці знаходяться записи мій номер і номер мого друга (пара друзів).

Яку ф-ю тоді виконує "мій номер"? Хто такий "я"?

10

Re: Sql запит у Asp.net

MegaMosk написав:

мені потрібно тільки останні смс, а не всі...

Останні n, чи за останній певний період часу?

11

Re: Sql запит у Asp.net

mich_retten написав:
MegaMosk написав:

мені потрібно тільки останні смс, а не всі...

Останні n, чи за останній певний період часу?

Для кожного існуючого діалогу тільки останню смс

12

Re: Sql запит у Asp.net

mich_retten написав:
MegaMosk написав:

Ні в таблиці знаходяться записи мій номер і номер мого друга (пара друзів).

Яку ф-ю тоді виконує "мій номер"? Хто такий "я"?

Є одна таблиця яка містить пари друзів. Для всіх людей, що є друзями існує запис в цій таблиці, де знаходяться номер першого і номер другого.

13

Re: Sql запит у Asp.net

MegaMosk написав:
mich_retten написав:
MegaMosk написав:

Ні в таблиці знаходяться записи мій номер і номер мого друга (пара друзів).

Яку ф-ю тоді виконує "мій номер"? Хто такий "я"?

Є одна таблиця яка містить пари друзів. Для всіх людей, що є друзями існує запис в цій таблиці, де знаходяться номер першого і номер другого.

Тобто 'я' - це просто якась конкретна особа, і у таблиці друзів можуть знаходитися записи, де цей 'я' - перший, і такі, де 'я' - другий. Вірно?

14

Re: Sql запит у Asp.net

MegaMosk написав:
mich_retten написав:
MegaMosk написав:

мені потрібно тільки останні смс, а не всі...

Останні n, чи за останній певний період часу?

Для кожного існуючого діалогу тільки останню смс

'існуючий діалог' - це уся переписка цього 'я' з якимось одним конкретним персонажем?
Тобто результат - два списки:
один - з останніх смс'ів, одержаних чи відправлених кожнолму з друзів, з ким було хоч яке листування
другий - те саме для листування з 'недрузями'

Тепер я правильно виклав?

15

Re: Sql запит у Asp.net

mich_retten написав:
MegaMosk написав:
mich_retten написав:

Яку ф-ю тоді виконує "мій номер"? Хто такий "я"?

Є одна таблиця яка містить пари друзів. Для всіх людей, що є друзями існує запис в цій таблиці, де знаходяться номер першого і номер другого.

Тобто 'я' - це просто якась конкретна особа, і у таблиці друзів можуть знаходитися записи, де цей 'я' - перший, і такі, де 'я' - другий. Вірно?


зроблено так що є запис то "я" завжди перший. "я" це користувач для якого потрібно вибрати.

16

Re: Sql запит у Asp.net

mich_retten написав:
MegaMosk написав:
mich_retten написав:

Останні n, чи за останній певний період часу?

Для кожного існуючого діалогу тільки останню смс

'існуючий діалог' - це уся переписка цього 'я' з якимось одним конкретним персонажем?
Тобто результат - два списки:
один - з останніх смс'ів, одержаних чи відправлених кожнолму з друзів, з ким було хоч яке листування
другий - те саме для листування з 'недрузями'

Тепер я правильно виклав?

Так