dk547

Рейтинг
51
Регистрация
01.06.2004

Чтобы не попасть под АГС я стараюсь продавать не более чем на 20% страниц и по 3-5 ссылок максимум. Пока полет нормальный (торгую давно). Поэтому с сайта с такими показателями можно ориентировочно поднимать около 800-1к рублей в месяц.

От темы сайта еще зависит.

Аналогично мой саттелит начало колбасить последние пару тройку недель схожим образом: пропадает до 99% страниц из индекса, потом все возвращается.

Что я думаю:

- Похоже на глюк все же

- Может быть действительно какой-то новый фильтр, в задачи которого в частности входит затруднение продажи ссылок с такого сайта :)

DriverCat:
Вы немного не поняли - у меня два разных запроса. Если первый не дал мне 3 строчек, я использую второй.

Хм, Вы хотите решить это только средствами mysql?

Я обычно такие вещи объединяю на стороне движка, т.к как сказал Alexius пересечение в mysql получить сложно и часто не оптимально. Для программной склейки можно использовать какой-то уникальный ключ или суррогатный md5 от данных строчки, к примеру.

Попробуйте так:

SELECT DISTINCT * FROM objects AS ...

Попробуйте так:

(SELECT `number`, `title`,

`description`, `alt`,

`mini_img`

FROM

`material`

LIMIT 3)

UNION ALL

(SELECT

`number`, `title`,

`description`, `alt`,

`mini_img`

FROM

`service`

LIMIT 1)

Книги еще:

Self-Indexing Inverted Files for Fast Text Retrieval (Alistair Moffat, Justin Zobel, February 1994)

Machine Learning in Automated Text Categorization (FABRIZIO SEBASTIANI)

Modern Information Retrieval (Ricardo Baeza-Yates, Berthier Ribeiro-Neto)

ps. есть pdf ки, если нужны пишите в личку.

_voland_:

Верно, это дерево каталогов, данные хранятся в виде строк id, parent в каждой.
Пишу не с нуля, так что преобразовывать структуру - никак.

Можно не менять структуру, но снизить сложность до 1 прохода по списку. Для этого правда нужно ввести отдельный индекс (сортированный список), в котором проиндексировать каждый каталог со списком всех своих чилдов, что-то типа:

categoryA, categoryB

categoryA, categoryC

categoryA, categoryD

..

Такой индекс можно рассчитывать заранее и хранить в отдельной таблице или еще как.

Имея дело с деревом adjacency list от рекурсии можно избавится только вот такими ухищрениями, которые имеют свою цену. Например, более сложное обновление каталогов.

adrin02, как я понимаю Вам нужно посчитать кол-во новостей в каждой из категорий. При этом новость может быть в одной, двух или сразу трех категориях?

Запрос

SELECT COUNT(*) FROM news WHERE cat=cat.id OR cat2=cat.id OR cat3=cat.id

скорее всего будет типа ALL независимо от индексов, т.е скан всех записей в таблице. При росте кол-ва записей в news все будет хуже и хуже работать.

Могу посоветовать только 2 варианта оптимизации:

1. вынести категории новостей в отдельную таблицу, что-то типа

create table news_category (

category_id int(11) unsigned not null,

news_id int(11) unsigned not null,

key (category_id, news_id)

) Engine=..

При добавлении новости вписывать 1-3 строчки в эту таблицу. При удалении удалять. При изменении категории обновлять.

Тогда посчитать кол-во новостей в каждой категории можно примерно так:

select c.id, count(*) from categories c inner join news_category nc on nc.category_id = c.id group by c.id;

Запрос будет использовать индексы по categories.id и индекс из news_category, это всяко быстрее чем полный скан таблицы.

2. В categories добавить новое поле типа news_counter и изменять его при добавлении/удалении новости, как в топике уже советовали.

Зачем вы делаете stripslashes($_POST["button_name"]); ?

Включена опция magic_quotes_gpc? Ее лучше отключить, она deprecated с php 5.3 и в php 6 будет убрана.

1. В самом SQL запросе сделайте экранирование всех параметров (может помочь исправить Вашу ошибку и заодно SQL injection :)

button_name = '$button_name' -> button_name = '".mysql_real_escape_string($button_name)."'

...

2. После этого echo '<p>Ошибка обнавления в базе!</p>';

добавьте echo mysql_error();

ps. Еще остается потенциальная уязвимость типа XSS, даже в админке не стоит расслабляться имх.

А у вас и есть JOIN (INNER), просто формат записи у него такой.

Наберите EXPLAIN SELECT ... и дальше весь код и можно в личку, помогу чем смогу.

Всего: 66