|
|
|
Выборка полей с одинаковым условием
|
|||
|---|---|---|---|
|
#18+
Добрый день! Существует таблица пользователей `users`. Сначала было одно поле `phone`, но исторически сложилось так, что появилось еще одно `MPhone`, а потом и еще одно `SMSPhone`. IDUserMPhoneSMSPhonephone1665965-95-6589111111112891111111131746711-22-3389222222222892222222231795822-22-66893333333332047289444444444894444444448944444444421711null89555555552895555555533148289666666662896666666633429908977777777289777777773 Сейчас с этим возникают определенные неудобства, будем менять структуру, а пока возникла задача: Есть скрипт для отправки смс, входные параметры - номера, разделенные запятой ($to) и сообщение, нужно найти ID юзеров с этими номерами. На данный момент запрос такой: Код: sql 1. Существует вероятность ошибки ER_NET_PACKET_TOO_LARGE (слишком длинный запрос), потому как номеров может быть несколько тысяч, да еще и в запросе они записаны трижды. Есть два вопроса: 1) Как можно сократить запрос, чтобы не дублировать одинаковое условие? 2) Как непосредственно в запросе узнать, какой номер выбран в сравнении и возможно ли это вообще? Например: IDUsermatched_phone16659891111111131746789222222222179588933333333331482896666666633429989777777773 Большое спасибо за уделенное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 05:18:59 |
|
||
|
Выборка полей с одинаковым условием
|
|||
|---|---|---|---|
|
#18+
1)Одним запросом, наверное, никак. Можно так Код: sql 1. 2. 3. 4. 5. 6. , но должны быть права на создание врем.таблиц + драйвер должен поддерживать multistatement запросы 2)добавить в селект t0.num :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 06:14:57 |
|
||
|
Выборка полей с одинаковым условием
|
|||
|---|---|---|---|
|
#18+
Фокус со временной таблицей не прошел из-за специфики нашего движка, поэтому пришлось выкручиваться (сократить не удалось): Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 07:20:24 |
|
||
|
Выборка полей с одинаковым условием
|
|||
|---|---|---|---|
|
#18+
Вот они какие "SMS спамеры" ... ух достали уже! :( Ну тогда уж так можно сократить длину запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Вместо удлинения запроса - делаем удлинение таблицы поиска. Если текст запроса не лезет в допустимый пакет, то замедление работы - все-таки меньшее зло. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 07:39:35 |
|
||
|
Выборка полей с одинаковым условием
|
|||
|---|---|---|---|
|
#18+
Arhat109, это не замедление, это фатальный стопкран :) Лучше уж тремя запросами, а на клиенте дособирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 07:50:15 |
|
||
|
Выборка полей с одинаковым условием
|
|||
|---|---|---|---|
|
#18+
ruserФокус со временной таблицей не прошел из-за специфики нашего движкаНе из-за специфики движка, а из-за того, что $to в этом случае должно иметь вид n1),(n2),...,(nK То есть должна получиться строка Код: sql 1. а не Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 08:27:34 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1835749]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
12ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 202ms |
| total: | 393ms |

| 0 / 0 |
