AutoSearches

Рейтинг
6
Регистрация
12.12.2017

А попробуйте такой вариант:


(SELECT 0 AS level, t1.*,
CONCAT_WS('-', t1.id, t1.alias) AS item_alias,
CONCAT_WS('-', t2.id, t2.alias) AS section_alias
FROM 13_cons_items AS t1
INNER JOIN 13_cons_sections AS t2 ON t1.section_id = t2.id
WHERE t1.parent_id = 0 AND t1.status = 1 AND t1.id != '13069' AND t1.section_id = '17'
AND MATCH(t1.name) AGAINST ('*Аномалия* *Арнольда* *Киари* *ст* *и* *Аспаркам*' IN BOOLEAN MODE)
UNION (SELECT 1 AS level, t1.*,
CONCAT_WS('-', t1.id, t1.alias) AS item_alias,
CONCAT_WS('-', t2.id, t2.alias) AS section_alias
FROM 13_cons_items AS t1
INNER JOIN 13_cons_sections AS t2 ON t1.section_id = t2.id
WHERE t1.parent_id = 0 AND t1.status = 1 AND t1.id != '13069' AND t1.section_id = '17'
AND MATCH(t1.name) AGAINST ('-*Аномалия* -*Арнольда* -*Киари* -*ст* -*и* -*Аспаркам*' IN BOOLEAN MODE))
ORDER BY level ASC LIMIT 3

https://stackoverflow.com/questions/14776350/mysql-like-operator-vs-match-against

Да отличается. Там(stackoverflow) рекомендуют вместо % использовать *

Вот так

AND MATCH (t1.name) AGAINST ('-*и*' IN BOOLEAN MODE)

Но что-то мне кажется что с этими изменениями запрос снова будет дольше выполняться.

https://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html

Вроде как надо знак минус добавить что NOT получить.

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('-YourSQL' IN BOOLEAN MODE);

Вот и пример не знаю правда ли достаточно прост

https://codepen.io/P3R0/pen/bdbRpe

Ну а деньги в этом случаи не возвращают?

c12o16h1:
Множество, где точно есть теннис - не исключает того, что это множество пересекается с множеством шахматы, либо любым другим. Нельзя просто брать, и отнимать 5500 (встречается теннис) от 7770 (теннис или шахматы), так как 5500 это просто встречайся теннис, а не исключение других сущностей, типа шахмат. Это как отнимать большие яблоки от спелых - это просто разные вещи. Наличие шахмат не означает отсутствие тенниса, и наоборот. Вы эту задачу решили интуитивно и правильно (повезло, а лучше б не везло), но при изменении входящих данных - это не будет работать всегда правильно, а значит лучше не писать такой код, чем писать (дешевле такого не иметь). Логическая цепочка должна выглядеть приблизительно так:
1. Есть множество, где встречается теннис, и оно равно 5500
2, Множество, которое включает И теннис И шахматы равно 1000
3. Значит, множество включающее теннис БЕЗ шахмат равно 5500 -1000 = 4500
4. Множество, включающее ЛИБО теннис, ЛИБО шахматы равно 7770.
5. Если мы знаем, что общее множество 7770, и множество исключительно тенниса равно 4500, то остаток должен представлять оставшиеся сущности. В нашем случае это только шахматы, итого шахматы встречаются в 7770 - 4500 = 3270 случаях.

P.S.: Подход Милторга на самом деле более правильный, чем Ваш. Без обид.

Это же пересечение множеств, я как-то не очень понимаю какая разница в каком порядке выполнять вычисление.

7770-5500 = страниц на которых только есть шахматы. У Вас есть 4500 страниц на которых которых только есть тенис. A+B=B+A

jpg Drawing1.jpg

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

Я от вспоминаю что когда он был 30 баксов я подумывал купить :) сейчас бы заработал нечего не делая. А так видимо у кого-то много денег и не знают куда вложить :) Сейчас мне это напоминает игру в азартные игры.

Если читать условие что страниц на которых встречается слово шахматы или теннис 7700

Страниц где точно есть слово теннис 5500 (шахматы могут быть а могут и не быть)

Страниц на которых есть шахматы и теннис 1000

То страниц на которых только есть шахматы 7700-5500 = 2270 еще 1000 страниц на которых шахматы и теннис Получаем 3270 страниц где есть шахматы

Вот есть статья сравнения VARCHAR(8000) и VARCHAR(MAX)

http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/

Чуть влияет...

Всего: 57