Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   MySQL как выбрать 3 значения из разных таблиц? (http://forum.oszone.net/showthread.php?t=52112)

benya 28-07-2005 12:30 344111

MySQL как выбрать 3 значения из разных таблиц?
 
Народ, помогите выбрать из базы данных 3 значения из разных таблиц.
Мне нужно выбрать :
1) Количество фотографий
2) Количество товаров
3)Количество сообщений в гостевой книге.


Я это сделал так :
(SELECT count(idjp) FROM `jpg`) UNION (SELECT count(idsp) FROM `shop`) UNION (SELECT count(idgb) FROM `gb`)
И вроде даже работает, но... пока не появляются в выборке одинаковые значения. Например idjp=30 idsp=15 и idgb=15. Два первых значения выбираются правильно, а последнего вообще нет.
Пытался перестроить запрос типа :
SELECT count(idjp),count(idsp),count(idgb) FROM `jpg`,`shop`,`gb`
Результат вообще чушь непонятная....

Как же правильно создать запрос???????

dmitryst 28-07-2005 12:48 344119

benya
Я бы выбирал значения по отдельности SELECT count(idjp) FROM 'jpg', SELECT count(idsp) FROM 'shop' и так далее...

benya 28-07-2005 13:36 344135

Так в первом случае и выбираются данные как бы в 3 запроса, только результат будет один "плоский". И если данные совпадают, то получается глюк какой-то. (как я описал выше).
Я принципиально не хочу выбирать значения отдельно.
Зачем делать что-то делать три раза, если данные можно получить одним запросом?? И системные ресурсы экономятся.

Prisoner 28-07-2005 13:52 344140

benya
Не факт. Вы поглядите (используя EXPLAIN) что да как. У меня лично аналогичные мнению dmitryst мысли. Explain выдаст информацию о числе связей которые должен сделать движок и много чего еще полезного.
P.S. К тому же не стоит оптимизировать все и вся, хорошего в меру. Машины сейчас мощные, экономить на таких вещах при числе не большом числе (1000/сек) посетителей, думаю не целесообразно.

XCodeR 28-07-2005 16:10 344177

Select table1.value1, table2.value2, table3.value3 ......
сначала название таблицы, потом через (.) название нужного поля.

benya 28-07-2005 17:02 344197

На самом деле я уже нашел ответ на свой же вопрос.
Можно сделать так:
Код:

SELECT count(DISTINCT idjp), count(DISTINCT idsp),count(DISTINCT idgb) FROM `jpg`, `shop`,`gb`
Так, все классно работает в одном запросе ;))
To: Prisoner
Конечно в чем-то ты прав, но.... Заместь 6 строк, мне бы пришлось написать 26...зачем???
Это все равно что заместь, к примеру такого кода:
Код:

for ($i=0; $i<1000; $i++) {
$r[$i] = $i;
}

написать
Код:

$r[1] = 1;
... #повторить 1000 раз
$r[1000] = 1000;

Работать будет и тот и другой пример. И второй при малой посещаемости будет работать не хуже первого... ;))

P.S. Всем спасибо за ответы ;))


Время: 21:51.

Время: 21:51.
© OSzone.net 2001-