PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (289): « 1 [2] 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 4334
Champion Отправлено: 23 Августа, 2013 - 14:51:25 • Тема: Чудеса или ....? • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 32
Вы, наверное, слышали, что все данные хранятся в двоичном виде. Не все десятичные дроби можно точно представить в двоичном виде, поэтому тип данных обеспечивает точность не всех знаков, а определенного числа знаков.
Champion Отправлено: 18 Августа, 2013 - 20:31:49 • Тема: Рекурсивые регулярные выражения • Форум: Регулярные выражения

Ответов: 4
Просмотров: 575
На самом деле проблему можно решить гораздо проще:
Alex_pac пишет:
<b>hello<b>привет</b> world</b>
такого просто не должно быть. Это не валидно. Внутри <b> не может быть другого <b>, поэтому, в зависимости от нашего желания, наша регулярка в праве выбрать любую пару <b></b> и проигнорировать остальные <b> и </b>. Например, /\[b\].+?\[\/b\]/ и без всяких recursive.
Она будет и проще, и быстрее. А написание парсера, "корректно" обрабатывающего невалидные данные - странная задача)

А еще есть рекурсивные подмаски - (?R) http://php[dot]ru/manual/regexp.reference.recursive.html
Champion Отправлено: 17 Августа, 2013 - 19:40:00 • Тема: Использование псевдонимов столбцов при вычислении значенй других столбцов • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 86
Наткнулся на свой же глупый вопрос) Теперь, когда я стал умнее, напишу, что решением этой проблемы является HAVING - в нем можно указывать фильтры по вычисляемым в списке полей выражениям. Штука с select from select конечно тоже работает, но если эта тема кому-нибудь попадется, то о хэвинге тоже надо знать
Champion Отправлено: 09 Августа, 2013 - 10:08:22 • Тема: Существует ли сложные запросы на удаление? • Форум: SQL и Архитектура БД

Ответов: 12
Просмотров: 85
Если не mysql, то
CODE (SQL):
скопировать код в буфер обмена
  1. WITH treeIds AS
  2. SELECT id FROM tbl WHERE id = 2
  3. UNION ALL
  4. SELECT 1 FROM tbl WHERE tbl.id = treeIds.parent_id
  5. DELETE FROM tbl WHERE id IN (SELECT IF FROM treeIds)

Поподробнее - рекурсивные CTE.

Если mysql, то несолько вариантов
1. Получить айдишки во временную таблицу запросом с несколькими джойнами и юнионами и удалить по этим айдишкам:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TEMPORARY table__tmp AS
  2. SELECT id FROM tbl WHERE id = 2
  3. UNION ALL
  4. SELECT t2.id FROM tbl t1 JOIN tbl t2 ON t2.parent_id = t1.parent_id WHERE t1.id = 2
  5. UNION ALL
  6. SELECT t3.id FROM tbl t1 JOIN tbl t2 ON t2.parent_id = t1.parent_id JOIN tbl t3 ON t3.parent_id = t2.parent_id WHERE t1.id = 2
  7. ...;
  8. DELETE FROM tbl WHERE id IN (SELECT * FROM __tmp)


2. Создать строковый столбец pathToRoot, содержащий для каждой строки путь к ней со всеми айдишками с разделителем типа 0,2,33,44
и удалить delete from tbl where pathToRoot like '0,2,%'.
pathToRoot обновлять триггером при вставке и обновлении. Правда для обновления значений pathToRoot в дочерних строках придется дополнительно вызывать что-то типа update tbl set id=id чтобы триггер всё проставил (либо делать update + replace приложением)

3. Внешний ключ с каскадным удалением (не знаю, будет ли работать, но почему бы нет)
Champion Отправлено: 03 Августа, 2013 - 23:30:57 • Тема: error dublicate entry key возникает только на хостинге • Форум: SQL и Архитектура БД

Ответов: 7
Просмотров: 55
Мне прочему-то кажется, что в том случае, когда Вы не можете преодолеть 2 147 483 647 , и виновато приведение к инту на стороне пхп, вариант всего один: у Вас 32 разрядный PHP, поэтом в инте всего 4 млрд чисел, из которых 2 положиткльных
Champion Отправлено: 31 Июля, 2013 - 21:44:34 • Тема: 10 000 запросов INSERT\UPDATE не напрягая базу • Форум: SQL и Архитектура БД

Ответов: 3
Просмотров: 39
во-первых, да, on duplicate key update, а во-вторых, разбейте запросы на порции по 500-1000 и делайте
begin transaction;
500-1000 инсертов;
commit;
Champion Отправлено: 23 Июля, 2013 - 17:43:12 • Тема: Ваши предложения по развитию конференции • Форум: Колонка администратора

Ответов: 70
Просмотров: 24668
Надо бы сделать чтоб один и тот же топик был всегда доступен по одной и той же ссылки, куда бы его не переносили.
Во-первых, эта ссылка шлется автору топика при создании темы и при перемещении с изменением ссылки потеряется.
Во-вторых, индексируется поисковиками и при перемещении со сменой опять-таки теряется.
В-третьих, если тема перемещена, пока кто-то пишет в ней ответ, то сообщение не сохраняется и может стать обидно.
Champion Отправлено: 23 Июля, 2013 - 17:42:46 • Тема: Ваши предложения по развитию конференции • Форум: Колонка администратора

Ответов: 70
Просмотров: 24668
RomAndry, надо бы, наверное. при переносе темы в другой раздел, чтобы автору слалось письмо об этом. А то авторы, не найдя по ссылке, которая им пришла при создании темы, свою тему, начинают создавать новые. Или просто в непонимании обижаются
Champion Отправлено: 17 Июля, 2013 - 10:58:48 • Тема: php __destruct (деструктор) • Форум: Объектно-ориентированное программирование

Ответов: 7
Просмотров: 2486
caballero пишет:
в деструкторах смысла особого нет
Иногда есть, если объект временными файлами срет. Или еще где-нибудь в неподконтрольном сборщику мусора месте.
Champion Отправлено: 07 Июля, 2013 - 14:07:02 • Тема: MD5 и соль • Форум: Вопросы новичков

Ответов: 45
Просмотров: 2852
Hapson, md5 имеет такое свойство, что во-первых из хеша невозможно вычислить исходное значение (только подобрать). Во-вторых, изменение входных данных ведет к непредсказуемому изменению на выходе. Соль - это как раз такое изменение данных на входе.
Соль, состящая из всякого бессмысленного набора символов с большой вероятностью делает хеш не словарным. И не важно - знаем мы соль или нет, нам это мало поможет.
Champion Отправлено: 06 Июля, 2013 - 22:10:32 • Тема: preg_match_all • Форум: Регулярные выражения

Ответов: 5
Просмотров: 282
Например,
CODE (htmlphp):
скопировать код в буфер обмена
  1.  /(?:by_|and_)((?:(?!(?:by_|and_)).)+)(?:by_|and_|$)/isU
Champion Отправлено: 19 Июня, 2013 - 18:27:13 • Тема: Требуется помощь кодера • Форум: FreeLance

Ответов: 23
Просмотров: 3631
nagibator пишет:
исправлений в самописе.
Что за самопися такая?
Champion Отправлено: 19 Июня, 2013 - 18:04:55 • Тема: Интересные задачи по SQL • Форум: SQL и Архитектура БД

Ответов: 25
Просмотров: 1830
Универсальное решение, видимо, только одно - то, которое привел EuGen. В принципе, это первый курс колледжа, приходит в голову довольно быстро.
(Добавление)
Contr, можно пез первого cte с лимитом. Его можно использовать и в анкорной части рекурсивного cte.
(Добавление)
Ну а вот еще решение:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT res
  2. FROM(
  3. SELECT
  4. @x := @x * mult res,
  5. @n := $n + 1 rn
  6. FROM test
  7. CROSS jon (SELECT @x := 1.00000 x, @n := 1  t) t
  8. ) t
  9. ORDER BY res DESC LIMIT 1
Champion Отправлено: 12 Июня, 2013 - 12:31:12 • Тема: Оптимизация запроса SQL • Форум: SQL и Архитектура БД

Ответов: 8
Просмотров: 66
biperch пишет:
еще вы пропустили один join LEFT JOIN profile_values pv
Тоже верно. Можно попробовать так
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. ... CROSS JOIN (
  3.         SELECT DISTINCT fid FROM profile_fields WHERE name = 'profile_last_name'
  4. ) t
  5.  LEFT JOIN profile_values pv ON pv.uid = cof.courier_id   AND pv.fid = t.fid
  6.  
И создать для этого один индекс по pv.uid и pv.fid вместе.
Еще, как говорили, подзапрос к profile_fields можно выполнить заранее и подставить полученные значения. Но это нехорошо, если он может возвращать большое количество записей.
Еще у меня все-таки есть предположение, что большинство лефл джойнов могут быть иннер. Это должно позволить уменьшить число 4636 из експлейна.

А вообще, если вы приложите дампчик, я с интересом поэксперементирую.
Champion Отправлено: 11 Июня, 2013 - 21:55:18 • Тема: Оптимизация запроса SQL • Форум: SQL и Архитектура БД

Ответов: 8
Просмотров: 66
biperch пишет:
База данных ругается на
Точно, select пропущен в последнем unione.

Страниц (289): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB