Страница 1 из 1
UNION
Добавлено: 2009-07-31 10:22:45
ProFTP
Код: Выделить всё
SELECT id_se,
name_se
FROM section
ORDER BY created desc
LIMIT 2 )
UNION
(SELECT t1.id_co,
t1.text_cm
FROM comment AS t1
ORDER BY t1.created desc
LIMIT 2
почему данный запрос выводит:
Код: Выделить всё
$VAR1 = [
[
'71',
'sdfsdf'
],
[
'70',
'5555'
],
[
'12',
'<p><strong>Как посмотреть список таблиц и их структуру в MySQL    </strong><br /><br />SHOW DATABASES; - список баз данных<br />SHOW TABLES [FROM db_name]; -  список таблиц в базе <br />SHOW COLUMNS FROM таблица [FROM db_name]; - список столбцов в таблице<br />SHOW CREATE TABLE table_name; - показать структуру таблицы в формате "CREATE TABLE"<br />SHOW INDEX FROM tbl_name; - список индексов<br />SHOW GRANTS FOR user [FROM db_name]; - привилегии для пользователя.<br /><br /><br />SHOW VARIABLES; - значения системных переменных<br />SHOW [FULL] PROCESSLIST; - статистика по mysqld процессам<br />SHOW STATUS; - общая статистика<br />SHOW TABLE STATUS [FROM db_name]; - статистика по всем таблицам в базе</p>'
]
];
но вывел 3 записи, то есть во втором запросе получается LIMIT 1
другой выдает все нормально:
Код: Выделить всё
SELECT t1.id_co,
t1.text_cm
FROM comment AS t1
ORDER BY t1.created desc
LIMIT 2
Код: Выделить всё
$VAR1 = [
[
'12',
'<p><strong>Как посмотреть список таблиц и их структуру в MySQL    </strong><br /><br />SHOW DATABASES; - список баз данных<br />SHOW TABLES [FROM db_name]; -  список таблиц в базе <br />SHOW COLUMNS FROM таблица [FROM db_name]; - список столбцов в таблице<br />SHOW CREATE TABLE table_name; - показать структуру таблицы в формате "CREATE TABLE"<br />SHOW INDEX FROM tbl_name; - список индексов<br />SHOW GRANTS FOR user [FROM db_name]; - привилегии для пользователя.<br /><br /><br />SHOW VARIABLES; - значения системных переменных<br />SHOW [FULL] PROCESSLIST; - статистика по mysqld процессам<br />SHOW STATUS; - общая статистика<br />SHOW TABLE STATUS [FROM db_name]; - статистика по всем таблицам в базе</p>'
],
[
'12',
'<p><strong>Как посмотреть список таблиц и их структуру в MySQL    </strong><br /><br />SHOW DATABASES; - список баз данных<br />SHOW TABLES [FROM db_name]; -  список таблиц в базе <br />SHOW COLUMNS FROM таблица [FROM db_name]; - список столбцов в таблице<br />SHOW CREATE TABLE table_name; - показать структуру таблицы в формате "CREATE TABLE"<br />SHOW INDEX FROM tbl_name; - список индексов<br />SHOW GRANTS FOR user [FROM db_name]; - привилегии для пользователя.<br /><br /><br />SHOW VARIABLES; - значения системных переменных<br />SHOW [FULL] PROCESSLIST; - статистика по mysqld процессам<br />SHOW STATUS; - общая статистика<br />SHOW TABLE STATUS [FROM db_name]; - статистика по всем таблицам в базе</p>'
]
];
всего у меня 4-5 таких запросов с LIMIT 2, я хотел объеденить их, правильно?
в чем проблема? в чем бред?
Re: UNION
Добавлено: 2009-07-31 12:27:59
zingel
юзай DBI::Pg
Re: UNION
Добавлено: 2009-07-31 14:17:38
ProFTP
там надо написать UNION ALL вместо UNION
Re: UNION
Добавлено: 2009-07-31 16:39:21
Sla
я тебе еще по секрету скажу
убери с первого селекта order by
Re: UNION
Добавлено: 2009-07-31 17:22:37
ProFTP
и как оно должно быть?
ты иммешь ввиду под оугмоу написать запрос?
Re: UNION
Добавлено: 2009-07-31 17:43:58
Sla
один в конце
Use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows
Re: UNION
Добавлено: 2009-07-31 17:47:31
ProFTP
Код: Выделить всё
( SELECT id_se,
name_se
FROM section
)
UNION
(SELECT t1.id_co,
t1.text_cm
FROM comment AS t1
ORDER BY t1.created desc
LIMIT 2
ok
Re: UNION
Добавлено: 2009-08-01 20:08:57
ProFTP
Sla писал(а):один в конце
у меня просто там разныез начения
вот посомтрите правильно ли запросы стоят?
Код: Выделить всё
#########################################
my $time = time - 3600;
my $sql = ' SELECT id, username,
( SELECT count(*) from sessions where expires >= '.$time.' or expires is null ) as count_users_on,
( SELECT count(*) from comment ) as count_comment,
( SELECT count(*) from content ) as count_content,
( SELECT count(*) from section ) as count_section,
( SELECT count(*) from users ) as count_users
FROM users ORDER BY id desc limit 1 ';
my $dbh = $c->model('DBI')->dbh;
my $sth = $dbh->prepare($sql);
$sth->execute();
my $loop_data = $sth->fetchrow_hashref();
$sth->finish();
$loop_data->{username_top} = $loop_data->{username};
$loop_data->{username} = substr ($loop_data->{username}, 0, 16) if ( length($loop_data->{username}) > 16);
$c->stash($loop_data);
## section
my $sql2;
if ( $c->user_exists() == 0) {
$sql2 = 'LEFT JOIN section AS t4
ON t1.id_se = t4.id_se
WHERE t1.hiden_g_co = 0
AND t1.active_se = 1
AND t4.hiden_g_co = 0
AND t4.active_se = 1';
}
if ( $c->user_exists() == 1
&& !$c->check_user_roles('moder_se') ) {
$sql2 = 'LEFT JOIN section AS t7
ON t1.id_se = t7.id_se
WHERE ( t1.active_se = 1
OR t1.id_un = ' . $c->user->{user}->{id} . ')
AND ( t7.active_se = 1
OR t7.id_un = ' . $c->user->{user}->{id} . ')' ;
}
if ( $c->user_exists() == 1
&& $c->check_user_roles('moder_se') ) {
$sql2 = '';
}
###########============
## content
my $sql;
my @sql;
if ($c->user_exists() == 0){
$sql = 'LEFT JOIN section AS t5
ON t2.id_se = t5.id_se
WHERE t2.active_co = 1
AND t2.hiden_co = 0
AND t2.hiden_g_co = 0
AND t5.active_se = 1
AND t5.hiden_g_co = 0';
}
if (!$c->check_user_roles('moder_se') && $c->user_exists() == 1) {
$sql = 'LEFT JOIN section AS t8
ON t2.id_se = t8.id_se
WHERE (t8.active_se = 1
OR t8.id_un = ' . $c->user->{user}->{id} . ')
AND (( t2.hiden_co = 1
AND t2.active_co = 1)
OR t2.id_un = ' . $c->user->{user}->{id} . ')';
}
if ($c->check_user_roles('moder_se') ) {
$sql = '';
}
#############=========
## comment
my $sql3;
if ($c->user_exists() == 0) {
$sql3 = ' LEFT JOIN content AS t9
ON t3.id_co = t9.id_co
LEFT JOIN section AS t10
ON t3.id_se = t10.id_se
WHERE t3.hiden_g_cm = 0
AND t9.hiden_g_co
AND t9.hiden_co = 0
AND t9.active_co = 1
AND t10.active_se = 1
AND t10.hiden_g_co = 0
';
}
if (!$c->check_user_roles('moder_se') && $c->user_exists() == 1) {
$sql3 = 'LEFT JOIN content AS t11
ON t3.id_co = t11.id_co
LEFT JOIN section AS t12
ON t3.id_se = t12.id_se
WHERE (( t11.hiden_co = 1
AND t11.active_co = 1)
OR t11.id_un = ' . $c->user->{user}->{id} . ')
AND (t12.active_se = 1
OR t12.id_un = ' . $c->user->{user}->{id} . ')';
}
if ($c->check_user_roles('moder_se') ) {
$sql3 = '';
}
my $sql = '(SELECT t1.id_se,
t1.name_se
FROM section AS t1
'.$sql2.'
ORDER BY t1.created desc
LIMIT 2 )
UNION ALL
(SELECT t2.id_co,
t2.name_co
FROM content AS t2
'.$sql.'
ORDER BY t2.created desc
LIMIT 2)
UNION ALL
(SELECT t3.id_co,
t3.text_cm
FROM comment AS t3
'.$sql3.'
ORDER BY t3.created desc
LIMIT 2)';
my $dbh = $c->model('DBI')->dbh;
my $sth = $dbh->prepare($sql);
$sth->execute(@sql);
my $loop_data = $sth->fetchall_arrayref();
$sth->finish();
# use Data::Dumper;
# print Dumper($loop_data);
#$self->_stat_cut('content',);
# section
$c->stash->{new_section_all1} = length ($loop_data->[0]->[1]) > 30 ? substr($loop_data->[0]->[1], 0, 30) : $loop_data->[0]->[1];
my @len = split (/ /, $loop_data->[0]->[1], 8 );
my $big;
foreach (@len) {
if ( length ($_) > 16 ) {
$big = 1;
$_ = substr $_, 0, 16;
$_ = $_.'.. ';
}
}
$c->stash->{new_section_id1} = $loop_data->[0]->[0];
$c->stash->{new_section_cut1} = $big ? join (' ', @len) : $loop_data->[0]->[1];
###
$c->stash->{new_section_all2} = length ($loop_data->[1]->[1]) > 30 ? substr($loop_data->[1]->[1], 0, 30) : $loop_data->[1]->[1];
my @len = split (/ /, $loop_data->[1]->[1], 8 );
my $big;
foreach (@len) {
if ( length ($_) > 16 ) {
$big = 1;
$_ = substr $_, 0, 16;
$_ = $_.'.. ';
}
}
$c->stash->{new_section_id2} = $loop_data->[1]->[0];
$c->stash->{new_section_cut2} = $big ? join (' ', @len) : $loop_data->[1]->[1];
#end
# content
$c->stash->{new_content_all1} = length ($loop_data->[2]->[1]) > 30 ? substr($loop_data->[2]->[1], 0, 30) : $loop_data->[2]->[1];
my @len = split (/ /, $loop_data->[2]->[1], 8 );
my $big;
foreach (@len) {
if ( length ($_) > 16 ) {
$big = 1;
$_ = substr $_, 0, 16;
$_ = $_.'.. ';
}
}
$c->stash->{new_content_id1} = $loop_data->[2]->[0];
$c->stash->{new_content_cut1} = $big ? join (' ', @len) : $loop_data->[2]->[1];
###
$c->stash->{new_content_all2} = length ($loop_data->[3]->[1]) > 30 ? substr($loop_data->[3]->[1], 0, 30) : $loop_data->[3]->[1];
my @len = split (/ /, $loop_data->[3]->[1], 8 );
my $big;
foreach (@len) {
if ( length ($_) > 16 ) {
$big = 1;
$_ = substr $_, 0, 16;
$_ = $_.'.. ';
}
}
$c->stash->{new_content_id2} = $loop_data->[3]->[0];
$c->stash->{new_content_cut2} = $big ? join (' ', @len) : $loop_data->[3]->[1];
#end
# comment
if ($loop_data->[4]->[1]) {
$c->stash->{new_comment_all1} = length ($loop_data->[4]->[1]) > 30 ? substr($loop_data->[4]->[1], 0, 30) : $loop_data->[4]->[1];
my @len = split (/ /, $loop_data->[4]->[1], 8 );
my $big;
foreach (@len) {
if ( length ($_) > 16 ) {
$big = 1;
$_ = substr $_, 0, 16;
$_ = $_.'.. ';
}
}
$c->stash->{new_comment_id1} = $loop_data->[4]->[0];
$c->stash->{new_comment_cut1} = $big ? join (' ', @len) : $loop_data->[4]->[1];
}
###
if ($loop_data->[5]->[1]) {
$c->stash->{new_comment_all2} = length ($loop_data->[5]->[1]) > 30 ? substr($loop_data->[5]->[1], 0, 30) : $loop_data->[5]->[1];
my @len = split (/ /, $loop_data->[5]->[1], 8 );
my $big;
foreach (@len) {
if ( length ($_) > 16 ) {
$big = 1;
$_ = substr $_, 0, 16;
$_ = $_.'.. ';
}
}
$c->stash->{new_comment_id2} = $loop_data->[5]->[0];
$c->stash->{new_comment_cut2} = $big ? join (' ', @len) : $loop_data->[5]->[1];
}
#end
Re: UNION
Добавлено: 2009-08-03 12:05:16
hizel
нипупа себе кошмары ты рожаешь :]
Re: UNION
Добавлено: 2009-08-03 20:05:24
ProFTP
ну так а что деать?
кстате, коменты забыл написать: в конце обрезаються длинные слова...