Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324

Запрос с условиями

15.02.2011, 13:15. Показов 1483. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Пишу админку для галереи. Всё работает...но хотелось бы сделать всё работало красиво
В общем есть 2 таблица в базе, одна (gallery) содержит в себе все альбомы и состоит из id, title(название альбома),cover(обложка альбома), discription(описание); вторая(photos) содержит информацию о фотографиях id, album(соответствует полю id в таблице с альбомами - именно по этому полю определяется какому альбому принадлежит фото), path(название фото), description(описание фото). Хотелось бы сделать один запрос, при помощи которго можно определить если у альбома не определена обложка, то выведется любая фотография наугад из этого альбома в качестве обложки, а если альбом пуст, то выведется заготовленная картинка(что то типо стандартной обложки). Могу это реализовать несколькими запросами, но если есть вариант одним, то подскажите пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.02.2011, 13:15
Ответы с готовыми решениями:

Запрос к базе с множественными условиями
Доброго времени суток уважаемые форумчане! Есть форма <form action="index.php" method="POST"> <legend>Выберите...

Динамический sql запрос с 4-мя независимыми условиями
Всем привет. Возникла следущая проблема-нужно составить динамический sql запрос, который может содержать до 4-х(включительно) независимых...

Как создать запрос с несколькими условиями
Всем добрый вечер. Необходимо создать запрос, со следующими условиями: - сортировать по одной из колонок всю таблицу (в колонке только...

16
23 / 23 / 11
Регистрация: 05.02.2010
Сообщений: 314
19.02.2011, 17:14
попробуй через case
0
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 08:45  [ТС]
Я попробовал таким образом составить запрос с CASE, но чёт ни чего не вышлоб не работает, ругается на меня. Вот что написал:
SQL Скопировано
1
2
3
4
5
6
7
"SELECT `gallery`.`id`, `gallery`.`title`, `gallery`.`description`, 
(CASE WHEN `cover` IS NULL 
THEN 
(SELECT `path` FROM `photos` WHERE `photos`.`album` = `gallery`.`id` LIMIT 1)
ELSE
(SELECT `cover` FROM `gallery`)
END) AS `cover_image` FROM `gallery`"
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
26.02.2011, 11:25
xand, думаю както так
SQL Скопировано
1
2
3
4
5
6
7
SELECT `gallery`.*, `photos`.`album` AS `album`
CASE WHEN `photos`.`album` IS NULL
THEN RAND()
ELSE CAST(`photos`.`album` AS `album`)
END `photos`.`album`
FROM `gallery`
LEFT JOIN `photos` ON `photos`.`album` = `gallery`.`id`
0
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 11:30  [ТС]
Sulik78, не получилось
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
26.02.2011, 11:36
xand, тупанул вместо RAND()
попробуй написать
SQL Скопировано
1
(SELECT `photos`.`album` FROM `photos` ORDER BY RAND() LIMIT 1)
0
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 11:38  [ТС]
Так выглядят таблицы в базе

gallery:
id | title | cover | description | created
----------------------------------------------------

photos:

id | album | path | description
----------------------------------------


Вот ваш запрос:
SQL Скопировано
1
2
3
4
5
6
7
SELECT `gallery`.*, `photos`.`album` AS `album`
CASE WHEN `photos`.`album` IS NULL
THEN (SELECT `photos`.`album` FROM `photos` ORDER BY RAND() LIMIT 1)
ELSE CAST(`photos`.`album` AS `album`)
END `photos`.`album`
FROM `gallery`
LEFT JOIN `photos` ON `photos`.`album` = `gallery`.`id`
Я немного его понять не могу. Выбыираем все поля таблицы gallery, с условием, если поле album в photos пусто и тд...
Мне то нужно проверять поле cover в таблице gallery

По моему так будет правильнее: ( но не работает )
SQL Скопировано
1
2
3
4
5
6
7
SELECT `gallery`.*,
CASE WHEN `gallery`.`cover` IS NULL
THEN (SELECT `photos`.`path` FROM `photos` WHERE `photos`.`album` = `gallery`.`id` LIMIT 1)
ELSE CAST(`gallery`.`cover` AS `cover`)
END 
FROM `gallery`
LEFT JOIN `photos` ON `photos`.`album` = `gallery`.`id`
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
26.02.2011, 11:53
тогда наверное надо
SQL Скопировано
1
2
3
4
5
6
7
SELECT `gallery`.* 
CASE WHEN `gallery`.`cover` IS NULL
THEN CAST(`photos`.`path` AS `cover`)
ELSE CAST(`gallery`.`cover` AS `cover`)
END 
FROM `gallery`
LEFT JOIN `photos` ON `photos`.`album` = `gallery`.`id`
таблицу photos мы уже присоеденили LEFT JOIN `photos` ON `photos`.`album` = `gallery`.`id`
1
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 11:59  [ТС]
Чего то всё равно не хочет работать
Всё равно спасибо за помощь! Буду думать дальше ...

PS если не трудно напишите по русски как вы понимаете этот запрос?
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
26.02.2011, 12:08
PHP Скопировано
1
2
3
4
5
6
7
SELECT `gallery`.* // выбрать всё из gallery
CASE WHEN `gallery`.`cover` IS NULL // если `gallery`.`cover` пустой
THEN CAST(`photos`.`path` AS `cover`) // тогда `cover` будет `photos`.`path`
ELSE CAST(`gallery`.`cover` AS `cover`) // иначе `cover` равен `gallery`.`cover`
END 
FROM `gallery` // выбираем из таблицы gallery
LEFT JOIN `photos` ON `photos`.`album` = `gallery`.`id` // присоеденив из photos с `album` равен `gallery`.`id`
1
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 16:37  [ТС]
Чё то у меня не получается ни чего...даже такой запрос не проходит:
SQL Скопировано
1
2
3
4
5
6
SELECT * 
CASE WHEN `cover` IS NULL 
THEN CAST('pusto' AS `cover`) 
ELSE CAST(`cover` AS `cover`) 
END 
FROM `gallery`
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
26.02.2011, 16:51
xand
SQL Скопировано
1
CASE `cover` WHEN IS NULL
0
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 16:58  [ТС]
Sulik78, не помогло
Покажу весь код:
PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$sql_gallery = "SELECT * 
CASE `cover` WHEN IS NULL 
THEN CAST('pusto' AS `cover`) 
ELSE CAST(`cover` AS `cover`) 
END 
FROM `gallery`";
$res_gallery = mysql_query($sql_gallery);
if($res_gallery and mysql_num_rows($res_gallery) > 0)
{   
    echo 'прошёл запрос';
    while($row_gallery = mysql_fetch_assoc($res_gallery))
    {
    $photo_amount = 10;
    echo '<tr id="par">
    <td><img src="files/gallery/'.$row_gallery['cover'].'" widht="100" height="100"/></td>
    <td id="album_central_td">
    <div>
    <strong>Название альбома:</strong> '.$row_gallery["title"].' <br/>
    <strong>Количество фотографий:</strong> '.$photo_amount.' <br/>
    <strong>Дата создания:</strong> '.$row_gallery["created"].' <br/>
    </div>
    <textarea class="album_description">'.$row_gallery["description"].'</textarea>
    </td>
    <td valign="top">
    <a href="gallery_editor.htm&album='.$row_gallery["id"].'" class="img_btn"><img src="https://www.cyberforum.ru/images/admin/edit.png" title="Редактировать альбом" width="24" height="24"/></a>
    <a href="#" class="img_btn delete"><img src="https://www.cyberforum.ru/images/admin/delete.png" title="Удалить альбом" width="24" height="24"/></a>
    <br/><br/><br/>
    <a href="#" class="img_btn update"><img src="https://www.cyberforum.ru/images/admin/update.png" title="Сохранить описание фото" width="24" height="24"/></a>
    <a href="#" class="img_btn exit_edit"><img src="https://www.cyberforum.ru/images/admin/exit_edit.png" title="Отменить" width="24" height="24"/></a>
    <input type="hidden" value="'.$row_gallery["id"].'" class="id_marker" />
    </td>
    </tr>';
    }
}
На переменную $photo_amount не стоит обращать внимания - это пока сделал 10, чтобы пусто не было.
Не выводит ни чего.
PS ссылки сами перебились на cyberforum
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
26.02.2011, 17:05
xand, дай талицу галереи
и вот еще ссылка часто пользуюсь как подсказками по сложным запросам
http://www.oftob.com/ru/sql/71-sql-tutorial-3
там несколько частей с примерами хорошими
0
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 17:08  [ТС]
сделал экспорт в phpmyadmin
структура
SQL Скопировано
1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `gallery` (
  `id` INT(3) NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(200) NOT NULL,
  `cover` VARCHAR(200) NOT NULL,
  `description` text NOT NULL,
  `created` DATE NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=40 ;
содержимое
SQL Скопировано
1
2
3
INSERT INTO `gallery` (`id`, `title`, `cover`, `description`, `created`) VALUES
(1, 'Первый альбом', '12983646423211.jpg', 'описание первого альбома3', '2011-02-20'),
(22, 'второй', '12983650133046.jpg', 'Описание второго альбома!!!', '2011-02-20');
0
 Аватар для Sulik78
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
26.02.2011, 17:34
xand, хз. обратись в раздел субд mysql, может помогут https://www.cyberforum.ru/mysql/
0
84 / 84 / 8
Регистрация: 12.04.2010
Сообщений: 324
26.02.2011, 17:39  [ТС]
Sulik78, спасибо, так и сделаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2011, 17:39
Помогаю со студенческими работами здесь

Поиск в БД по LIKE с несколькими условиями
Привет всем. Вопрос простой. Есть талица Email Istochnik test@mail.ru Источник1 test@yandex.ru Источник1 ...

Не выполняется блок с условиями
Написал код, который из взятых ранее данных о том, какой модуль mysql установлен, формирует соответствующие запросы: если это mysql, то он...

Выведение данных с конкретными условиями
Доброго времени. Есть таблица moves, в которой есть столбцы id, name, from_loc и in_loc. (+ users, с интересующими нас id и location) ...

Перенаправление на другую страницу с условиями
привет! ести проблемка, я делаю страницу голосование /опрос, на первой странице пользователь вводит свой уникальный код (получает по...

создание цикла с постоянно меняющимися условиями
Доброго времени суток. Помогите написать цикл который должен проходить такое количество раз сколько записей в базе, но с таким условием что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи будет применено как метод обработки данных из double buffering. Формулы от LM конечно с ошибками.
Hrethgir 10.04.2025
В продолжение Эта LM дала ответ похожий на нормальный. В комментриях мой комментарий - похоже она ошиблась с выведением итоговой формулы, но остальные проверю. Assistant qwen2. 5-14b-instruct . . . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Линейное решение не линейной задачи (емкость вычислений в сравнении с традиционными решениями пока не определена).
Hrethgir 10.04.2025
В рамках предстоящих вычислений пришлось (да, я тоже знаю про корень числа, и про степеня, и прочие теоремы, но. . . ) найти способ нахождения отношения двух углов. . . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
Подключение Kafka к Elasticsearch
Codd 09.04.2025
Apache Kafka и Elasticsearch — две мощные технологии, которые при совместном использовании создают эффективную платформу для обработки и анализа данных в реальном времени. Kafka, выступая в роли. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер