Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
Есть таблица: Код: sql 1. 2. 3. 4. С клиента приходят массивы, они являются как бы фильтрами данных: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Все бы ничего, да вот только поле author может содержать авторов через запятую, как видно из примера, что не подпадает под такой фильтр: `author IN ('author1')` - естественно такой фильтр выберет только 2-ую запись из таблицы, а нужно все записи где этот автор участвовал ( а это 1-ая и 2-ая записи ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 12:47 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
StasonixЕсть таблица: Код: sql 1. 2. 3. 4. С клиента приходят массивы, они являются как бы фильтрами данных: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Все бы ничего, да вот только поле author может содержать авторов через запятую, как видно из примера, что не подпадает под такой фильтр: `author IN ('author1')` - естественно такой фильтр выберет только 2-ую запись из таблицы, а нужно все записи где этот автор участвовал ( а это 1-ая и 2-ая записи ). Возможно при такой структуре и можно так сделать, как Вам надо.. но это же гемор :) Как по мне нужны 3 таблицы (это по-хорошему, если об авторе также хранятся данные в базе, иначе можно 2 таблицы делать): 1. Таблица авторов. 2. Таблица записей (книг, статей или чего они там пишут) 3. Таблица связей (id автора, id статьи). Через Join связываем таблицы в запросе и жить становится просто :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 13:48 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
а чем лайк не подходит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 13:59 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
JustCrazyа чем лайк не подходит ?камнями не кидайтесь, мне действительно интересно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:02 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
JustCrazy, вместо автора отвечу )) А как через like данную выборку сделать? "WHERE autor LIKE '%autor1%' OR autor LIKE '%autor2%'..." ? Во-первых это не удобно, а во-вторых - по такому запросу будут выбраны все произведения авторов autor1 и autor2, а вместе с ними autor11, autor22, autor12, someautor1 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:05 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
Если без изменения структуры БД, то как-то так разве что: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:06 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
ПрограмёрJustCrazy, вместо автора отвечу )) А как через like данную выборку сделать? "WHERE autor LIKE '%autor1%' OR autor LIKE '%autor2%'..." ? Во-первых это не удобно, а во-вторых - по такому запросу будут выбраны все произведения авторов autor1 и autor2, а вместе с ними autor11, autor22, autor12, someautor1 и т.д. ну насколько я понял автора, если в массиве приходит 2-3 автора, то ему надо получить данные, где авторов именно 2-3, тогда и запрос можно выполнить Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:07 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
JustCrazyну насколько я понял автора, если в массиве приходит 2-3 автора, то ему надо получить данные, где авторов именно 2-3, тогда и запрос можно выполнить Код: php 1. Вроде автор написал, что ему нужны: Stasonix все записи где этот автор участвовал. и видимо это всё-таки не для всех сразу поступивших на вход, а для каждого в отдельности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:10 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
anvanoJustCrazyну насколько я понял автора, если в массиве приходит 2-3 автора, то ему надо получить данные, где авторов именно 2-3, тогда и запрос можно выполнить Код: php 1. Вроде автор написал, что ему нужны: Stasonix все записи где этот автор участвовал. и видимо это всё-таки не для всех сразу поступивших на вход, а для каждого в отдельности так это он указывает для случая, когда в фильтре 1 автор, а не несколько ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:14 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
JustCrazyтак это он указывает для случая, когда в фильтре 1 автор, а не несколькохотя я может просто недопонимаю.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:15 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
JustCrazyПрограмёрJustCrazy, вместо автора отвечу )) А как через like данную выборку сделать? "WHERE autor LIKE '%autor1%' OR autor LIKE '%autor2%'..." ? Во-первых это не удобно, а во-вторых - по такому запросу будут выбраны все произведения авторов autor1 и autor2, а вместе с ними autor11, autor22, autor12, someautor1 и т.д. ну насколько я понял автора, если в массиве приходит 2-3 автора, то ему надо получить данные, где авторов именно 2-3, тогда и запрос можно выполнить Код: php 1. А что произойдёт, если в базе будут авторы autor1 и someautor1 ? )) Я ведь уже написал, что это одна из причин :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:20 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
Даже если надо несколько сразу, что ты будешь делать, если в базе они в одном порядке, а на вход передали тех же авторов в другом порядке? В моём варианте можно просто по AND склеить те же самые условия вместо OR и всё будет работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:20 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. Любой ранее написанный код может быть сохранён без изменений с использованием GROUP_CONCAT в запросе (то есть список авторов в php будет приходить как единное поле `autor` где авторы будут расположены через запятую). Таким образом изменение структуры базы никак не скажется на php коде (кроме переписывания самих запросов разумеется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2013, 14:43 |
|
||
|
Выборка по массивам?
|
|||
|---|---|---|---|
|
#18+
Stasonix $conditions[] = "author IN ('".implode("','",$authors)."')"; Все бы ничего, да вот только поле author может содержать авторов через запятую Зато в имени автора не может быть запятой. Или у вас есть и такие авторы? Кстати, а что будет если я напишу вместо фамилии автора с запятой в массив нечто типа DELETE * FROM author WHERE 1. Я не знаю что, просто интересуюсь как людям удается взять данные в посте и прямиком их положить в скобки кляузы IN. Судя по авторским запятым, у вас там даже не фиксированный список, а свободный ввод. Короче, сначала массив превращается в строку? Потом обратно в массив по разделителю запятой. Все ручные запятые дадут еще авторов. Это в представленной парадигме. Без нее надо смотреть как такого избежать вообще. И авторов тоже надо избегать (escape), причем лучше всего каждого в отдельности. Во избежание недоразумений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2013, 07:47 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38352950&tid=1463545]: |
0ms |
get settings: |
7ms |
get forum list: |
24ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
90ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 431ms |

| 0 / 0 |
