Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: 1 запрос - 2 разных ответа 2х серверов
 
 автор: exp   (07.07.2008 в 16:06)   письмо автору
 
 

простой запрос :
SELECT main.*, COUNT(cmnts.id) FROM main, cmnts WHERE main.id=2
GROUP BY 2

возвращает на локальном MySQL всё как хотелось,
а на другом 0 рядов

SELECT VERSION();

# показывает на первом:

 5.0.45-community-nt

# , на втором

5.0.37-standard-log

таблицы идентичные .
сделал пока с подзапросом:
SELECT *, (SELECT COUNT(*) FROM cmnts) FROM main WHERE id=2


но наверное лучше всё одним запросом, т.к. этот запрос один из запросов объединённых при помощи UNION ALL ?

В чём может быть причина такого , и как ещё можно попробовать без подзапроса?

   
 
 автор: Trianon   (07.07.2008 в 16:13)   письмо автору
 
   для: exp   (07.07.2008 в 16:06)
 

Вы бы написали, что хотите посчитать, и структуру таблиц бы привели.
Запросы - безобразные.

   
 
 автор: exp   (07.07.2008 в 16:31)   письмо автору
 
   для: Trianon   (07.07.2008 в 16:13)
 

_

   
 
 автор: exp   (07.07.2008 в 16:33)   письмо автору
 
   для: Trianon   (07.07.2008 в 16:13)
 

И правда наверное безобразные запросы :)

примерно что-то похожее на скрипт новостей.

Две из таблиц -
CREATE TABLE IF NOT EXISTS `main` (
`id` INT( 6 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`dt` DATETIME NOT NULL ,
`u_name` TINYTEXT NOT NULL ,
`m_name` TINYTEXT NOT NULL ,
`msg` TEXT NOT NULL ,
`hide` ENUM( '0', '1' ) DEFAULT '0' NOT NULL ,
`razd` INT( 2 ) UNSIGNED DEFAULT 0 NOT NULL ,
PRIMARY KEY ( `id` ) ,
FULLTEXT ( `msg` )
) TYPE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;


CREATE TABLE IF NOT EXISTS `cmnts` (
`id` INT( 8 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`dt` DATETIME NOT NULL,
`u_name` CHAR( 32 ) NOT NULL ,
`m_name` TINYTEXT NOT NULL ,
`msg` TEXT NOT NULL ,
`info` TEXT NOT NULL ,
`mes` INT( 6 ) UNSIGNED NOT NULL ,
PRIMARY KEY ( `id` ),
FULLTEXT ( `msg` ) 
) TYPE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;


и после одного похожего запроса идёт второй , этот:

<?
$sql 
m_query('( SELECT main.*, 1 AS cnt FROM main WHERE main.id=1 LIMIT 1 )
    UNION ALL
    (SELECT main.id, main.dt, main.u_name, main.m_name, INSERT(main.msg, 155, -1, CONCAT(\'<a href="./?' 
$list '_\', main.id, \'">.....читать</a>\')), main.hide, main.razd,  COUNT(cmnts.id) FROM main LEFT JOIN cmnts ON main.id = cmnts.mes WHERE main.id > 2 AND main.hide=\'0\'
 GROUP BY main.id ORDER BY main.dt DESC LIMIT '
    
$COUNT .', ' $c_msgs .' )
    UNION ALL 
( SELECT *, (SELECT COUNT(*) FROM cmnts) FROM main WHERE id=2
GROUP BY 2);'
1);


Далее из результата скриптом первый ряд выводится как шапка всех страниц
последний ряд как завершение, решил хранить их в той-же таблице с id 1 и2
, просто старался не делать более двух запросов на странице

$c_msgs - сообщений на странице
$COUNT - стартовый ряд

$list - номер страницы начиная с нуля

   
 
 автор: exp   (07.07.2008 в 16:41)   письмо автору
 
   для: exp   (07.07.2008 в 16:33)
 

во втором count() колличество комментариев к новости

в третьем всего комментариев

   
 
 автор: Trianon   (07.07.2008 в 16:54)   письмо автору
 
   для: exp   (07.07.2008 в 16:33)
 

по-моему, сокращать количество запросов с трех до одного на страницу - это уже болезнь :)
И если COUNT(*) Вы втискиваете лишь затем, чтоб отдельный запрос не плодить... нет, дело Ваше, конечно, просто я затрудняюсь Вам что-то посоветовать по делу.
Под безобразным запросом я имел в виду группирующий запрос с повисшими полями - т.е. полями, перечисленными в списке SELECT вне агрегатных функций и не указанными в GROUP BY (Приличные СУБД такие запросы просто отвергают.)

   
 
 автор: exp   (07.07.2008 в 21:15)   письмо автору
 
   для: Trianon   (07.07.2008 в 16:54)
 

Oказалось просто из-за того что в таблице cmnts в одной из двух BD небыло не одной записи
но интересно почему-же без подзапроса уже так не работает :)

Теперь только придётся делать как-то так ;)
SELECT main.*, COUNT(cmnts.id) - 1 FROM main, cmnts WHERE main.id=2 GROUP BY 2

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования