Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
27 / 27 / 10
Регистрация: 26.01.2013
Сообщений: 231

Выборка из базы через join

25.08.2013, 22:38. Показов 733. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Проблема такая. Есть 2 таблицы в базе.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- Структура таблицы `site_updates`
--
 
CREATE TABLE IF NOT EXISTS `site_updates` (
  `update_id` INT(4) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор обновления',
  `version_release` VARCHAR(11) NOT NULL COMMENT 'Версия релиза',
  `date_release` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата выхода релиза',
  PRIMARY KEY (`update_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COMMENT='Обновления сайта' AUTO_INCREMENT=2 ;
 
--
-- Дамп данных таблицы `site_updates`
--
 
INSERT INTO `site_updates` (`update_id`, `version_release`, `date_release`) VALUES
(1, '0.0.1', '2013-08-25 23:00:13');
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- Структура таблицы `release_title`
--
 
CREATE TABLE IF NOT EXISTS `release_title` (
  `id_title` INT(5) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор заголовка релиза',
  `update_id` INT(4) NOT NULL COMMENT 'Идентификатор обновления',
  `release_title` VARCHAR(150) NOT NULL COMMENT 'Заголовок релиза',
  `header_description_release` text NOT NULL COMMENT 'Описание заголовка релиза',
  PRIMARY KEY (`id_title`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;
 
--
-- Дамп данных таблицы `release_title`
--
 
INSERT INTO `release_title` (`id_title`, `update_id`, `release_title`, `header_description_release`) VALUES
(1, 1, 'Добавлен раздел "Обновления сайта"', 'В данном разделе будут опубликовываться описания обновлений, которые были произведены на сайте.');
Суть такова, что в первой таблице лежит версия релиза и дата выхода релиза а во второй n-ое количество обновлений которые были произведены в релизе.

На данный этап выбираю
PHP
1
$releases = mysql_query("SELECT a.version_release as a_version_release, DATE_FORMAT(a.date_release, '%e %M %Y в %H:%i') as a_date_release FROM site_updates as a ORDER BY a.update_id DESC");  /* Выбираем все нужным нам данным из базы */
потом вывожу все обновления, но в цикле
PHP
1
2
3
4
5
do
      {
           // вывожу версию релиза и дату
          // А здесь нужно вывести все обновления которые по айдишнику относятся к релизу
      }
Вопрос как соединить 2 таблицы чтобы в версии релиза выводить все обновления релиза? Можно конечно выбрать сначала версии и в цикле версии снова делать выборку и выбирать уже все обновления релиза, но это уже 2 запроса, а это не есть хорошо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2013, 22:38
Ответы с готовыми решениями:

Выборка из базы через разделитель
Добрый вечер! Я с толкнулся с проблемой. Есть таблица cat в ней поле name В него вбиваются данные через запятую (то есть допустим в базе...

Выборка записей из таблицы базы данных через filter
Нужно выбрать все записи со значением зарплаты выше введенного, значение можно задать через edit, как осуществить фильтрацию в фильтре...

выборка join-where
есть такая структура бд CREATE TABLE IF NOT EXISTS `personnel`.`tbl_practice` ( `id` TINYINT(1) NOT NULL AUTO_INCREMENT , ...

6
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.08.2013, 22:47
SQL
1
SELECT ...... FROM ... LEFT JOIN `table2` USING(`update_id`) ORDER .....
Добавлено через 1 минуту
или, скорее, вам надо не LEFT JOIN, а INNER JOIN
1
27 / 27 / 10
Регистрация: 26.01.2013
Сообщений: 231
25.08.2013, 22:53  [ТС]
Благодарю! А если так? и коммент написал в коде, что не выходит
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
35
36
37
38
39
40
41
/* Обнолвения сайта */
$releases = array(); /* Очищаем массив */
$releases = mysql_query("SELECT a.version_release as a_version_release, DATE_FORMAT(a.date_release, '%e %M %Y в %H:%i') as a_date_release, b.release_title as b_release_title, b.header_description_release as b_header_description_release FROM site_updates as a  INNER JOIN release_title AS b ON a.update_id = b.update_id ORDER BY a.update_id DESC");    /* Выбираем все нужным нам данным из базы */
echo "<div class='updates'>";
    if ($releases == FALSE) /* Если произошла ошибка в запросе */
        {
            echo "<span class='error_mysql_query'>{$global_12}</span>";
        }
    if ($releases == TRUE)  /* Если ошибки в запросе не произошло */
        {
            if (mysql_num_rows($releases) == 0)  /* Если количество равно 0 */
                {
                    echo "<span class='mysql_num_rows_null'>{$global_13}</span>";
                }
            if (mysql_num_rows($releases) > 0)  /* Если количество больше 0 */
                {
                    $releases_array = mysql_fetch_array($releases); /* Ложем в переменную массив с данными */
                    do  /* Цикл */
                        {
                            echo "<div>";
                                echo "<div class='block_updates'>";
                                    echo "<div class='updates_version'>";
                                        echo "<span class='updates_version_text'>Версия релиза:</span> <span class='updates_version_number'>{$releases_array['a_version_release']}</span>";
                                    echo "</div>";
                                    echo "<div class='clear'></div>";
                                    echo "<div class='what_s_new_in_release'>";
                                        echo "<img class='what_s_new_in_release_img' src='images/updates/new_upload.png' />";
                                        echo "<div class='what_s_new_in_release_text'>Что нового в данном релизе?</div>";
                                    echo "</div>";
                                    echo "<div class='clear'></div>";
                                    // Только тут получается нужно както циклом прогнать все обновления релиза, а как?
                                    echo "<div class='text_updates'><img class='text_updates_img' src='images/updates/ul_li.png' /><span class='text_updates_text'>{$releases_array['b_release_title']}</span></div>";
                                    echo "<div class='text_updates_clarifications'><img class='text_updates_img_clarifications' src='images/updates/clarifications.png' /><span class='text_updates_text_clarifications'>{$releases_array['b_header_description_release']}</span></div>";
                                    echo "<div class='release_date'>Дата выхода релиза: {$releases_array['a_date_release']}</div>";
                                echo "</div>";
                            echo "</div>";
                        }
                    while($releases_array = mysql_fetch_array($releases));  /* Делать цикл пока есть записи */
                }
        }
echo "</div>";
А сейчас наоборот выводится тип версии релиза 2 а не 2 обновления в релизе
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.08.2013, 22:59
Так у вас может быть много релизов на одну запись ? Используйте замените INNER на RIGHT
1
27 / 27 / 10
Регистрация: 26.01.2013
Сообщений: 231
25.08.2013, 23:07  [ТС]
Нет наоборот 1 релиз и в нём 1 и более записей. На данный этап код не менял. и получается что релиз 0.0.1 и в нём 2 записи 1 и 2, в выводит мне релиз 0.0.1 запись 1 и следом релиз 0.0.1 запись 2, а нужно просто релиз 0.0.1 запись 1. Запись 2.
Миниатюры
Выборка из базы через join  
0
27 / 27 / 10
Регистрация: 26.01.2013
Сообщений: 231
25.08.2013, 23:35  [ТС]
Уже как только не пробовал и всё равно результат такой как на скрине
0
Заблокирован
26.08.2013, 09:00
Цитата Сообщение от anonymous_23 Посмотреть сообщение
Есть 2 таблицы в базе.
Сколько отношений? Если тоже 2, то фундаментальная схема "суть такова":

select t1.*, t2.* from t1, t2 where t1.child_iden = t2.parent_iden;

Кстати, а как вы каменты к полям достаете в php?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.08.2013, 09:00
Помогаю со студенческими работами здесь

Выборка с Join
Здравствуйте! Существует две таблицы - с товарами и фильтрами. Фильтры подключены в запрос через join. Первая таблица имеет вид: ...

Выборка с использованием JOIN
Всем привет! Не могли вы помочь бедному студенту с JOIN-ом. &quot;Вывести список названий дисциплин (поле Namesubject из таблицы Subjects)...

Выборка списка в join
Привет. Подскажите что использовать, что бы сделать выборку списка, используя join. Вот примерный запрос $sql = &quot;SELECT t1.*,t2.* ...

Выборка из двух таблиц и Inner Join
выбираю данные из двух таблиц select tehnika.num_teh as Наименование,hist_remont.date_izm from tehnika,hist_remontздесь всё ОК теперь...

Выборка из нескольких таблиц с JOIN
всем привет. есть 3 таблицы. как правильно выбрать все классы для препода с id = 1(или с id = 2, c условием WHERE) и его...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru