- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков

В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
SQL:
SELECT id, cnt FROM tbl1 t LEFT JOIN (SELECT COUNT(*) as cnt, field FROM tbl2 t2 WHERE t2.field = id) vyborka ON vyborka.field = id WHERE ... и т.д.
выдает Column 'field' cannot be null
почему? Просто голова уже разрывается :( Подскажите пжалста...
Для простоты... в табличке в одной есть люди, которые публикуют объявления (люди: ид человека, имя). Во второй хранятся объявления (объявление, ид объявления, ид человека, давшего объявление). Нужно выбрать всех людей и кол-во их объявлений. Делал уже такое, да и код вроде как верный (судя по ошибке, конечно, НЕ верный)... MySQL, InnoDB.
Делал такое на MyISAM. Может на InnoDB как то по-другому подобная штука делается?...
То есть. Сделать просто выборку по одной таблице и включить в неё кол-во строк из другой таблицы. Где во второй выборке идентификатор из первой таблицы должен быть равен какому то полю из второй таблицы... Вроде же просто всё... но не могу сделать уже часа 2 наверное, если не больше... :(
LEFT уберите.
Смотрите результат запроса
SELECT COUNT(*) as cnt, field FROM tbl2 t2 WHERE t2.field = id
его смысл вообще не понятен, скорее всего значение поля field - null
возможно надо так:
SELECT COUNT(*) as cnt, field FROM tbl2 t2 WHERE t2.field = id group by field
Делал такое на MyISAM. Может на InnoDB как то по-другому подобная штука делается?...
Никакого значения не имеет, скорее всего значения в таблицах разные.
LEFT уберите.
бред
netwind Не понял зачем убирать LEFT, если я хочу, чтобы таблица, которая стоит слева оставалась нетронутой. Ну убрал... получил 0 записей. Потому что запрос во втором селекте не проходит а таблицы джойнятся только в том случае, если во второй и в первой таблице однозначно существует инстанция, задаваемая после оператора ON.
SELECT COUNT(*) as cnt, field FROM tbl2 t2 WHERE t2.field = id
его смысл вообще не понятен, скорее всего значение поля field - null
Почему не понятен?
Выбрать количество как cnt из tbl2 (присвоить элиас t2) где t2.поле = id из таблицы слева.
Если я подставляю в качестве id существующее значение, - всё прекрасно получается, но тогда в результате у меня получится куча записей, для которых только для одного идентификатора выводится кол-во присутствия в поле field второй таблицы.
Мозг начинает взрываться :)
Никакого значения не имеет, скорее всего значения в таблицах разные
я тоже думаю, что значения не имеет, - просто предположил уже почти от безысходности :) Ну не то чтобы именно от нее - я в любом случае могу сделать выборку, а потом для каждого пользователя проверить сколько у него сообщений (объявлений и т.д.)... Хотелось бы просто одним запросом бахнуть всё. Ведь 1 итак небольшой всяко лучше 200 чуть поменьше...
а если вместо id подставить null?
сделайте
SELECT field FROM tbl2 t2 where field is null
если количество записей отлично от нуля - проблема в этих записях, mysql не хочет джоинить записи по null.
вообще правильней подсчитать количество присоединенных записей без вложенного запроса:
select a.id,count(*)
from a
inner join u on u.id=a.assigned_id
group by a.id
а если вместо id подставить null?
сделайте
SELECT field FROM tbl2 t2 where field is null
если количество записей отлично от нуля - проблема в этих записях, mysql не хочет джоинить записи по null.
is null - нет записей.
is not null - навалом.
То есть во второй таблице (которую джойню) поле feld всегда не ноль.
НО! Если я делаю запрос ко второй табле вот так:
SELECT * FROM tbl2 where field is not null
то получаю все записи tbl2 и в поле field (ну я же не слепой) вижу нормальные целые значения.
Если я делаю
SELECT field FROM tbl2 where field is not null
то получаю кучу результатов (собственно количество равно кол-ву записей в таблице), НО field = 0! Шо за пакость? ((
Ну убрал... получил 0 записей.
Ну так у вас противоречивые данные или вы перепутали поля в выражении ON. Убрать LEFT полезно с точки зрения проверки на адекватность. Как может быть 0 записей, если некоторые пользователи обязательно оставили сообщения ?
Выкладывайте дамп, короче. Иначе гадать будем долго.
is null - нет записей.
is not null - навалом.
То есть во второй таблице (которую джойню) поле feld всегда не ноль.
НО! Если я делаю запрос ко второй табле вот так:
SELECT * FROM tbl2 where field is not null
то получаю все записи tbl2 и в поле field (ну я же не слепой) вижу нормальные целые значения.
Если я делаю
SELECT field FROM tbl2 where field is not null
то получаю кучу результатов (собственно количество равно кол-ву записей в таблице), НО field = 0! Шо за пакость? ((
смотрим что выдает :)
SELECT field FROM tbl2 where field=0
вообще такой запрос у меня не проходит
select name,count(*)
from accounts a
MySQL Database Error: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Да и такой запрос не имеет смысла, т.к. использование агрегатных функций подразумевает group by.
Попробуйте sql из моего предыдущего поста.
вообще правильней подсчитать количество присоединенных записей без вложенного запроса:
select a.id,count(*)
from a
inner join u on u.id=a.assigned_id
group by a.id
ай шайтан! Заработало.
Спасибо - буду знать :)
So1 добавил 29.09.2009 в 11:49
Ну так у вас противоречивые данные или вы перепутали поля в выражении ON.
Ничего не путал. Я не могу сидеть и путать 3 часа подряд. Импортнул пачку записей на другой хост - там этот запрос работает прекрасно. Что тут - я даже догадываться не могу.
А вообще всегда выбирал кол-во записей подобным запросом. Пусть немного неправильно, но написано самостоятельно после некоторых раздумий и работает. Работает при том не просто на ГСах, а на вполне приличных порталах. Как видно теперь - работает не везде.
Учтите, что выводит только те записи, у которых есть присоединенные.
So1, ну так и выложили бы дамп. кто-нибудь обратил бы внимание на настройку сервера sql_mode
Кстати inner join это самый настоящий join без left. Как же вы без left теперь ?