Почему неверные результаты COUNT?

WebByte

Проходящий мимо
Почему неверные результаты COUNT?

PHP:
SELECT COUNT(t1.url) FROM links AS t1
Результат: 336

PHP:
SELECT COUNT(DISTINCT t2.url) FROM links AS t2
Результат: 96

PHP:
SELECT COUNT(t1.url), COUNT(DISTINCT t2.url) FROM links AS t1, links AS t2
Результат: 112896 | 96
 

HEm

Сетевой бобер
Потому что в SQL простое объединение двух запросов в один неравнозначно каждому из этих запросов, поскольку t1 с t2 в запросе не связано, то COUNT(t1.url) выдало перемноженные (каунты c повторами)

112896 = 336*336
 

WebByte

Проходящий мимо
одним запросом получить то, что получаю двумя по отдельности
 

HEm

Сетевой бобер
попробовал для одной своей таблицы, верная картина получиолась при добавлении условия WHERE t1.id=t2.id

-~{}~ 07.08.04 16:08:

но вообще-то не вижу особого смысла делать это одним запросом, у тебя это место критично по скорости? тебе жалко лишних 4 строчки кода написать?
 

WebByte

Проходящий мимо
Таблицы большие (336 - тестовая). Если считать каунты несколько раз (10-20 запросов) для несколкьих сотен пользователей.. Как думаешь - критично?
 

WebByte

Проходящий мимо
глянул. спасибо. таблица, ессесн с индексами. даже с несколькими.
 

Falc

Новичок
WebByte

А зачем тебе из двух таблиц каунты считать?


SELECT COUNT(t1.url), COUNT(DISTINCT t1.url) FROM links AS t1
 

HEm

Сетевой бобер
Falc
боится, что посетитель не дождется вывода и уйдет со страницы
 

Falc

Новичок
HEm
Неужели выборка из 2-х таблиц должна работать быстрее чем из одной?
 

HEm

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

WebByte

Проходящий мимо
Да это лишь пример. Запросы там к разным таблицам идут..
 

Falc

Новичок
WebByte
>>Запросы там к разным таблицам идут..
Тогда вообще тупо пытаться объединять в один запрос
 
Сверху