PHP.SU

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

Страниц (17): В начало « ... 3 4 5 6 [7] 8 9 10 11 ... » В конец

> Найдено сообщений: 253
Anguis Отправлено: 20 Мая, 2013 - 07:59:17 • Тема: Помогите с RewriteRule • Форум: Вопросы новичков

Ответов: 8
Просмотров: 294
up
Any ideas?
Anguis Отправлено: 19 Мая, 2013 - 19:40:15 • Тема: Помогите с RewriteRule • Форум: Вопросы новичков

Ответов: 8
Просмотров: 294
примерно как-то так
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteRule ^request /index.php [L]
  3. RewriteRule ^(.*)request /request
  4.  
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteRule ^(.*)$ /index.php
  7.  


пурга какая-то получается Хм
(Добавление)
поясню для чего нужно. Сайт на комерческой cms с ЧПУ. Исходный htacess в первом посте. Установили дополнительный модуль, реализующий личный блог каждого зарегистрированного пользователя. Все урл на сайте в стиле site.org/path/to/page, урлы пользователей site.org/users/userid, а урлы блогов в новом модуле site.org/blog?id=userid а мне надо сделать что бы были /users/userid/blog
Может есть еще пути решения? Редирект не канает. Пользователь не должен видеть в браузере урлов типа site.org/blog?id=userid
Anguis Отправлено: 19 Мая, 2013 - 19:11:55 • Тема: Помогите с RewriteRule • Форум: Вопросы новичков

Ответов: 8
Просмотров: 294
KingStar, internal Server Error при запросе /request Зацикливается. Если поставить RewriteRule ^request - [L], то тогда все срабатывает, кроме RewriteRule ^(.*)$ /index.php
А это тоже важно. request должен обрабатывать index.php, как и любой другой запрос..
Anguis Отправлено: 19 Мая, 2013 - 18:49:24 • Тема: Помогите с RewriteRule • Форум: Вопросы новичков

Ответов: 8
Просмотров: 294
ну неужели ни кто не в курсе?
Anguis Отправлено: 19 Мая, 2013 - 09:38:46 • Тема: Помогите с RewriteRule • Форум: Вопросы новичков

Ответов: 8
Просмотров: 294
htacess :
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. RewriteEngine on
  3. RewriteBase /
  4.  
  5. RewriteCond %{HTTP_HOST} ^site.org
  6. RewriteRule (.*) http://www.site.org/$1 [R=301,L]
  7.  
  8. RewriteCond %{REQUEST_FILENAME} !-f
  9. RewriteRule ^(.*)$ /index.php
  10.  


Нужно добавить правило, что-бы любую ссылку в которой содержится request направило на /request
например site.org/user/1/request -> site.org/request site.org/user/1?request -> site.org/request

Вроде тривиальная задача, но бьюсь уже второй день. Большинство манипуляций вроде RewriteRule ^.*request.*$ /request либо ни как не работают, либо приводят к зацикливанию с internal server error
Anguis Отправлено: 05 Марта, 2013 - 18:28:20 • Тема: Сортировка массивов по размеру • Форум: Вопросы новичков

Ответов: 0
Просмотров: 99
Такой вопрос. Возможно ли отсортировать многомерный массив array(array(1,2),array(1,2,3),array(1,2,3,4)), по размеру подмассивов? Или скажем, по длине ключа. Может есть возможность отсортировать несколько разных массивов по размеру?
Anguis Отправлено: 14 Февраля, 2013 - 01:56:22 • Тема: Вопрос по массивам • Форум: Вопросы новичков

Ответов: 8
Просмотров: 309
Шаблон main_view покажите, и то место где должен быть id
Anguis Отправлено: 14 Февраля, 2013 - 01:06:12 • Тема: Нужно создать тейбл для переписки • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 18
Все что придумал на данный момент:
PHP:
скопировать код в буфер обмена
  1. $sql = 'SELECT * FROM talks WHERE identy ='.($id0>$id1?$id1.'&'.$id0:$id0.'&'.$id1)

В поле identy будут храниться значения типа 12&14, 45&87 Меньший id всегда на первом месте, что-бы не делать OR в запросе. Ну и индекс безусловно по identy.
Выскажите мнение по поводу этой хни, потянет для сельской местности?
Anguis Отправлено: 14 Февраля, 2013 - 00:57:27 • Тема: Аналог list() для mysql • Форум: SQL и Архитектура БД

Ответов: 29
Просмотров: 174
EuGen,
Цитата:
Благодарю за любопытную задачу, кстати
Хотите еще одну? Хотелось бы оптимизировать нижеследующий запрос, если это возможно. На той-же таблице в 10000 записей он отрабатывает за 0.07 сек. В принципе, этого достаточно, но если возможно такой запрос оптимизировать, было бы очень хорошо!!)
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT t . * , COUNT( f.id ) posts, p.json user, a.json author
  3. FROM (
  4. SELECT *
  5. FROM Forum
  6. ORDER BY id DESC
  7. )f
  8. JOIN Pages p ON p.id = f.user_id
  9. JOIN Pages a ON a.id = f.user_topic
  10. JOIN Forum t ON t.id = f.topic_id
  11. WHERE f.forum_id =1
  12. AND f.type = 'post'
  13. GROUP BY f.topic_id
  14. ORDER BY f.id DESC
  15.  


Расскажу что он делает - он выбирает темы форума в порядке последнего добавленного сообщения с информацией о авторе, создавшем тему и пользователе, написавшем последнее сообщение. Подзапрос используется для инвертирования таблицы, иначе mysql упорно не желает выбирать последние сообщения (берет первое найденное).
Anguis Отправлено: 13 Февраля, 2013 - 17:43:17 • Тема: Нужно создать тейбл для переписки • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 18
Необходимо разработать систему онлайн-общения на сайте.
Хочу сделать так. Для общения двух человек - одна строка в таблице, поле longtext для текста переписки + поля для айдишников общающихся юзеров.
Нужно как-то придумать что-бы оба айдишника запихать в одно поле. Ибо форму общения может вызвать как один пользователь, так и другой и запрос что для одного, что для другого должен выглядеть одинаково, примерно как-то так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM talks WHERE somefield=$id


Нужно что-бы, например, для $id=12 и $id=14, выбралась одна и та же запись (общаются пользователи с id 12 и 14).
Что можно придумать для Mysql MyISAM?
(Добавление)
Мне пока ни чего умнее
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM talks WHERE user=$id OR altuser=$id

В голову не идет Недовольство, огорчение
(Добавление)
Ой ой ой. Напортачил. Тут используется связка. Айди вызывающего пользователя + айди вызываемого пользователя. Т.е. в запрос попадает эта связка.
Anguis Отправлено: 12 Февраля, 2013 - 20:15:57 • Тема: Аналог list() для mysql • Форум: SQL и Архитектура БД

Ответов: 29
Просмотров: 174
EuGen, дело не в том, выбирать forum_id или id, дело в том что вся основная текстовая информация содержится в поле json с type='forum' и нужно выбирать именно его, а не id или forum_id. В вашем запросе дело в WHERE который, я так понимаю, (ни разу не встречал параметр в where без сравнивания) не должен являться NULL, что позволяет выбрать всю таблицу, совершить подсчет по всей таблице, но не выбрать записи c type=forum и необходимым json-текстом, без использования join. По крайней мере WHERE id , WHERE type=forum и т.п. манипуляции ни к чему не привели )
(Добавление)
Вот такой запрос то что нужно и быстро Улыбка
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. mysql> SELECT f.id, f.type, COUNT(DISTINCT a.id) AS posts_count, COUNT(DISTINCT a.topic_id) AS topics_count FROM test.Forum a JOIN test.Forum f ON f.id = a.forum_id WHERE a.forum_id  GROUP BY a.forum_id;
  3. +------+-------+-------------+--------------+
  4. | id   | type  | posts_count | topics_count |
  5. +------+-------+-------------+--------------+
  6. |    1 | forum |        2666 |           11 |
  7. |    2 | forum |        2740 |           16 |
  8. |   15 | forum |        2706 |           10 |
  9. | 5028 | forum |         954 |           15 |
  10. | 5029 | forum |         961 |           16 |
  11. +------+-------+-------------+--------------+
  12. 5 rows IN SET (0.01 sec)
  13.  
Anguis Отправлено: 12 Февраля, 2013 - 18:26:51 • Тема: Аналог list() для mysql • Форум: SQL и Архитектура БД

Ответов: 29
Просмотров: 174
Верно, запрос работает быстрее значительно и успешно считает топики и посты, однако вот беда, основную информацию он возвращает не ту...
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. mysql> SELECT f.id,f.type, (SELECT COUNT(*) FROM test.Forum f0 WHERE f0.forum_id = f.id AND f0.type = 'post') AS posts, (SELECT COUNT(DISTINCT(f0.topic_id)) FROM test.Forum f0 WHERE f0.forum_id = f.id AND f0.type = 'post') AS topics FROM test.Forum f WHERE f.type = 'forum';
  3. +------+-------+-------+--------+
  4. | id   | type  | posts | topics |
  5. +------+-------+-------+--------+
  6. |    1 | forum |  2666 |     11 |
  7. |    2 | forum |  2740 |     16 |
  8. |   15 | forum |  2706 |     10 |
  9. | 5028 | forum |   954 |     15 |
  10. | 5029 | forum |   961 |     16 |
  11. +------+-------+-------+--------+
  12. 5 rows IN SET (0.06 sec)
  13.  
  14. mysql> SELECT id, type, COUNT(DISTINCT id) AS posts_count, COUNT(DISTINCT topic_id) AS topics_count  FROM test.Forum  WHERE forum_id  GROUP BY forum_id;+------+------+-------------+--------------+
  15. | id   | type | posts_count | topics_count |
  16. +------+------+-------------+--------------+
  17. |    7 | post |        2666 |           11 |
  18. |    3 | post |        2740 |           16 |
  19. |   16 | post |        2706 |           10 |
  20. | 5030 | post |         954 |           15 |
  21. | 5031 | post |         961 |           16 |
  22. +------+------+-------------+--------------+
  23. 5 rows IN SET (0.01 sec)
  24.  


Он выбирает посты, а не форумы. Из строки поста я название форума не вытяну Улыбка
Anguis Отправлено: 12 Февраля, 2013 - 14:09:46 • Тема: Аналог list() для mysql • Форум: SQL и Архитектура БД

Ответов: 29
Просмотров: 174
Сделал:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. mysql> SELECT COUNT(*) FROM test.Forum;
  3. +----------+
  4. | COUNT(*) |
  5. +----------+
  6. |    10032 |
  7. +----------+
  8. 1 row IN SET (0.00 sec)
  9.  
  10. mysql> SELECT f.id,f.type, (SELECT COUNT(*) FROM test.Forum f0 WHERE f0.forum_id = f.id AND f0.type = 'post') AS posts, (SELECT COUNT(DISTINCT(f0.topic_id)) FROM test.Forum f0 WHERE f0.forum_id = f.id AND f0.type = 'post') AS topics FROM test.Forum f WHERE f.type = 'forum';
  11. +------+-------+-------+--------+
  12. | id   | type  | posts | topics |
  13. +------+-------+-------+--------+
  14. |    1 | forum |  2666 |     11 |
  15. |    2 | forum |  2740 |     16 |
  16. |   15 | forum |  2706 |     10 |
  17. | 5028 | forum |   954 |     15 |
  18. | 5029 | forum |   961 |     16 |
  19. +------+-------+-------+--------+
  20. 5 rows IN SET (0.05 sec)
  21.  
  22. mysql> SELECT     forum.id,     forum.type,    COUNT(DISTINCT forum_posts.id) AS posts_count,    COUNT(DISTINCT forum_topics.topic_id) AS topics_count  FROM    test.Forum forum    LEFT JOIN    test.Forum AS forum_posts       ON forum.id=forum_posts.forum_id AND forum_posts.type='post'    LEFT JOIN    test.Forum AS forum_topics      ON forum.id=forum_topics.forum_id AND forum_topics.type='post'  GROUP BY    forum.topic_id  HAVING    posts_count>0;
  23. +------+-------+-------------+--------------+
  24. | id   | type  | posts_count | topics_count |
  25. +------+-------+-------------+--------------+
  26. |    1 | forum |        2666 |           11 |
  27. |    2 | forum |        2740 |           16 |
  28. |   15 | forum |        2706 |           10 |
  29. | 5028 | forum |         954 |           15 |
  30. | 5029 | forum |         961 |           16 |
  31. +------+-------+-------------+--------------+
  32. 5 rows IN SET (1 min 6.23 sec)
  33.  


Предыдущая таблица была расширена. Возможно, результат изменился бы если бы таблица изначально так формировалась. В любом случае в данном конкретном случае для меня очевиден выбор в пользу подзапросов.
Anguis Отправлено: 12 Февраля, 2013 - 12:56:13 • Тема: Аналог list() для mysql • Форум: SQL и Архитектура БД

Ответов: 29
Просмотров: 174
Цитата:

Оно и понятно - данные "заполнены" скриптом автоматически (у меня по 2000 тысячи сообщений в 3-4 темах), стало быть в данном случае подзапрос дает выигрыш. Однако же в реальной ситуации кардинальное число ключа будет много лучше (я бы даже сказал, в корне лучше), и в общем случае прирост от JOIN будет куда выше.

Хотите сказать что если модифицировать скрипт, который будет добавлять 1топик со 100 постами рандомно (эмуляция реального форума) и провести тест, результаты изменятся?
Я щас попробую Улыбка
Anguis Отправлено: 12 Февраля, 2013 - 12:42:30 • Тема: Аналог list() для mysql • Форум: SQL и Архитектура БД

Ответов: 29
Просмотров: 174
Скорее всего это из-за MyISAM. InnoDB и MyISAM - разные движки, под различные цели. В InnoDB некоторым данным и такой запрос отлично сработает:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT f.*
  3. FROM Forum f
  4. WHERE f.forum_id=$id AND f.type = 'post'
  5. GROUP BY f.topic_id
  6. ORDER BY f.id DESC
  7. LIMIT 30;
  8.  

А с MyISAM нужно извращаться вот так:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT f.*
  2. FROM (SELECT * FROM Forum ORDER BY id DESC) f
  3. WHERE f.forum_id=$id AND f.type = 'post'
  4. GROUP BY f.topic_id
  5. ORDER BY f.id DESC
  6. LIMIT 30;

Я думаю что MyISAM специально создан для таких извращений Улыбка
Кстати по поводу извращений Улыбка
Возвращаясь к первому посту хочу отметить что есть способ одним подзапросом вытащить оба значения:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT f.*,
  3. (SELECT CONCAT_WS(':',COUNT(*),COUNT(DISTINCT(f0.topic_id))) FROM Forum f0 WHERE f0.forum_id = f.id AND f0.type = 'post') AS posts_&_topics,
  4. AS topics
  5. FROM Forum f
  6. WHERE f.type = 'forum'
  7.  

Радость Врятли это поможет выиграть в производительности, ведь потом придется делать explode или substr какой-нибудь. А можно внутри запроса результат подзапроса присвоить переменной, а потом над переменной SUBSTRING_INDEX Не понял Ха-ха

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB