SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.04.2010 17:35:46

serjinio
Завсегдатай
Зарегистрирован: 10.07.2008
Сообщений: 30

Выбрать по 1 картинки и всех категорий

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `s_id` int(10) unsigned NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `s_id` (`s_id`),
  KEY `name` (`url`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

и таблица картинок связанная внешним ключом с таб. categories

CREATE TABLE IF NOT EXISTS `i` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cat_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `cat_id` (`cat_id`),
  KEY `title` (`title`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

как выбрать из таблицы картинок по одной (последней добавленной) для всех категории

Отредактированно serjinio (01.04.2010 17:38:26)

Неактивен

 

#2 01.04.2010 18:01:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выбрать по 1 картинки и всех категорий

Что-то вроде


set @n=1, @j=0, @p=0;

select * from (select * from i ord by cat_id asc, `time` desc) t where @i<@n and if(@p=cat_id, @j:=@j+1,(@j:=0) or (@p:=cat_id));

Неактивен

 

#3 01.04.2010 18:20:47

serjinio
Завсегдатай
Зарегистрирован: 10.07.2008
Сообщений: 30

Re: Выбрать по 1 картинки и всех категорий

А как этот запрос на php перевести

Неактивен

 

#4 01.04.2010 20:48:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выбрать по 1 картинки и всех категорий

Никак переводить не надо. Просто выполнить как и любой другой запрос.

Неактивен

 

#5 01.04.2010 22:17:32

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Выбрать по 1 картинки и всех категорий

В смысле, нужно каждый из этих двух запросов выполнить как отдельный запрос (через mysql_query и т.п.)

Неактивен

 

#6 02.04.2010 01:26:23

serjinio
Завсегдатай
Зарегистрирован: 10.07.2008
Сообщений: 30

Re: Выбрать по 1 картинки и всех категорий

Вставленный запрос в ПМА


SET @n =1,
@j =0,
@p =0;# MySQL вернула пустой результат (т.е. ноль строк).
SELECT *
FROM (

SELECT *
FROM i ord
BY cat_id ASC , `time` DESC
)t
WHERE @i < @n
AND if( @p = cat_id, @j := @j +1, (
@j :=0
)
OR (
@p := cat_id
) ) ;


Вернул ошибку
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by cat_id asc, `time` desc) t where @i<@n and if(@p=cat_id, @j:=@j+1,(@j:=0) or ' at line 1

в таком варианте он выполняется
SET @n =1,
@j =0,
@p =0;# MySQL вернула пустой результат (т.е. ноль строк).
SELECT *
FROM (
SELECT *
FROM `i` ORDER BY `cat_id` ASC , `time` DESC)t
WHERE @i < @n
AND if( @p = `cat_id` , @j := @j +1, (@j :=0)
OR (@p := `cat_id`) ) ;

но ничего не выводит
DESC)t  что такое t ?

Отредактированно serjinio (02.04.2010 01:41:40)

Неактивен

 

#7 02.04.2010 02:08:10

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Выбрать по 1 картинки и всех категорий

vasya допустил опечатку в запросе. Надо не ord BY cat_id , а ORDER BY cat_id.
Только в муадмине может не сработать, т.к. возможно он разные соединения открывает - тогда переменные сессии (@..) не сохранятся.

DESC)t  что такое t ?

t - это псевдоним подзапроса - (SELECT *...).
(он не всегда бывает нужен при использовании подзапросов, но в данном случае необходим)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson