Подсчитать одним запросом кол-во строк в 2-х табл.

Royal Flash

-=MaestrO=-
Подсчитать одним запросом кол-во строк в 2-х табл.

Просьба подсказать, каким образом можно подсчитать одним запросом кол-во строк в двух разных таблицах?

SELECT count(*) FROM table1, table2;

выдает произведение table1*table2.
 

svetasmirnova

маленький монстрик
У меня 2 таблички с полем id. Можно так:
[sql]
select count(*) from test1 left join test2 using (id);
[/sql]
 

Royal Flash

-=MaestrO=-
svetasmirnova
Работает то оно работает.... Вот только "тормозит не по детски"... В базе с 3000 записей на нормальном сервере считается 13 секунд :)
 

svetasmirnova

маленький монстрик
Royal Flash
Ищи лучше. Вот в принципе:
[sql]
select count(*) from test1 union select count(*) from test2;
[/sql]
Сложишь руками. Наверное ещё что-то придумать можно, да мне уже неинтересно ;)

-~{}~ 22.10.05 01:40:

>считается 13 секунд
LEFT JOIN? Хм... Вообще-то странно всё это
 

Royal Flash

-=MaestrO=-
svetasmirnova
Вот этот вариант работает быстро, только считает он только кол-во строк первой таблицы... Я его еще за пол-часа до твоего ответа проверял. Но всеравно спасибо, за попытку помочь :)
 

svetasmirnova

маленький монстрик
И как ты это узнал? Я даже угадаю. Послал запрос при помощи PHP и посмотрел первую строку?
 

svetasmirnova

маленький монстрик
:)
Ты консольным клиентом mysql запрос выполни. Или все строки запроса выбери, а не первую.
 

Royal Flash

-=MaestrO=-
Мне нужно на PHP :) Хотя, я не думаю, что этот запрос средствами PHP и через консоль будет иметь отличные результаты:

$sql = '
SELECT count(*) FROM table1
UNION
SELECT count(*) FROM table2';
$result = mysql_query($sql);
$r = mysql_fetch_array($result);
echo mysql_error(); // ошибок нет
print_r($r); // Array ( [0] => 2508 [count(*)] => 2508 ) Хотя в двух таблицах их более 3000

Если поменять селекты местами будет кол-во строк из 2 таблицы.... Хотя по идее должно работать :(
 

svetasmirnova

маленький монстрик
>Хотя, я не думаю, что этот запрос средствами PHP и через консоль будет иметь отличные результаты:
Конечно не будут. Но сделай что тебе говорят, а?
И прочитай внимательно вот это: [m]mysql_fetch_array[/m]
 

tony2001

TeaM PHPClub
Royal Flash

--------------------> Или все строки запроса выбери, а не первую. <--------------------

Если б можно было сделать надпись мигающей - сделал бы, чесслово.
 

Royal Flash

-=MaestrO=-
Из мана:
Если несколько колонок в результате будут иметь одинаковые названия, последняя колонка будет возвращена. Чтобы получить доступ к первым, используйте численные индексы массива или алиасы в запросе.
Но ведь print_r($r) должен, по идее, показать ВСЕ СТРОКИ (индексы --> парм. и название-->парм.), что находится в ответе MySQL, а вот численных индекс, в нем, какраз один... Вообщем... "ничего не понимаю" :(
 

si

Administrator
так пойдет ?
mysql> select count(*) from users;
+----------+
| count(*) |
+----------+
| 388471 |
+----------+
1 row in set (0.00 sec)

mysql>select count(*) from votes;
+----------+
| count(*) |
+----------+
| 3200750 |
+----------+
1 row in set (0.00 sec)

mysql>select a.cnt+b.cnt from (select 1, count(*) cnt from users) a, (select 2, count(*) cnt from votes) b;
+-------------+
| a.cnt+b.cnt |
+-------------+
| 3589221 |
+-------------+
1 row in set (0.01 sec)
 

.des.

Поставил пиво кому надо ;-)
si , если версия mysql поддерживает вложенные селекты, то человек так и не узнает как выбрать "все строки запроса" :D
 
Сверху