|
 111.4 Кб |
|
| Нужно вывести информацию из БД. Таблицы имеют тип InnoDb и связаны так как показано на рисунке.
Нужно показать в табличном виде какому виду радиостанций подходят какие виды зарядных устройств и батарей.
Не могу сформировать правильный запрос на вывод (полей таблицы r_models и полей таблиц r_b и r_c), так чтобы поля таблицы r_model выводились все, а из таблиц r_b, r_c выводилось только поля b_model и с_model , которые являются частью составного ключа.
Подскажите пожалуйста как это сделать.
Привожу листинг вывода таблицы, без вывода полей c_model, b_model.
<body>
<?php
echo ("Список моделей радиостанций:<br><br>");
// Соединение с базой даных
require_once ("config.php");
// Делается выборка из таблиц базы данных
$query ="SELECT r_models.* FROM r_models";
$result = mysql_query ($query,$dbcon);
$myrow = mysql_fetch_array ($result);
// Я пробовал по разному- много разных запросов и один запрос с подзапросами
//$queryb ="SELECT * FROM r_b";
//$resultb = mysql_query ($queryb,$dbcon);
//$myrowb = mysql_fetch_array ($resultb);
//$queryc ="SELECT * FROM r_c";
//$resultc = mysql_query ($queryc,$dbcon);
//$myrowc = mysql_fetch_array ($resultc);
// Вывод результата выборки на экран
?>
<table width="1200" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Модель радиостанции </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Стандарт радиостанции </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Стационарность </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Периодичность ТО </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Срок службы </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Используемые аккумуляторные батареи </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Используемые зарядные устройства </strong></td>
</tr>
<?php
do
{
echo "<tr><td>".$myrow['r_model']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['standard']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['stationarity']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['period_to']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['life']."</td>";
if $myrow['r_model'] = $myrow['r_model']
//echo "<td>".$myrow['b_model']."</td>"; В этих столбцах нужно вывести совместимые батареи
//echo "<td>".$myrow['c_model']."</td></tr>"; В этих столбцах нужно вывести совместимые зарядники
}
while ($myrow = mysql_fetch_array ($result));
?>
</table>
</body>
|
| |
|
|
|
|
|
|
|
для: romu4-
(29.04.2009 в 18:16)
| | Вывести модели одниго типа комплектующих ( к примеру - батареи ) у Вас получилось?
Уберите do while. Ему здесь не место. | |
|
|
|
|
|
|
|
для: Trianon
(29.04.2009 в 18:24)
| | У меня получилось сделать вывод всех полей таблицы r_models. Это делается в цикле Do - While.
А вот поля b_model и c_model я не могу понять как выводить. | |
|
|
|
|
|
|
|
для: romu4-
(29.04.2009 в 18:28)
| | Так... Чувствую, диалог будет "не в коня корм"...
Поэтому ответ напишу, поскольку запрос, позволяющий вытащить данные, и вправду нетривиальный.
SELECT m.*, bls, cls
FROM r_models m
LEFT JOIN
(SELECT r_model AS brm, GROUP_CONCAT(b_model SEPARATOR ',') AS bls
FROM r_b
) AS sb ON r_model = brm
LEFT JOIN
(SELECT r_model AS crm, GROUP_CONCAT(c_model SEPARATOR ',') AS cls
FROM r_c
) AS sc ON r_model = crm
|
Комментариев не будет.
Почему зарядное устройство определяется рацией, а не батареей, у меня вызывает отдельное недоумение. | |
|
|
|
|
|
|
|
для: Trianon
(29.04.2009 в 18:41)
| | По поводу радиостанций и зарядных устройств:
Дело в том, что нынче зарядное устройство физически подключается к радиостанции, хотя заряд осуществляется аккумуляторной батареи. Как у современных мобильных телефонов. Хотя есть и такие, которые заряжают непосредственно батарею. Но я решил все завязать на рацию, тк к ней сводятся все устройства.
Вы не первый , кто задает мне такой вопрос...
Если вы сейчас скажите что по-вашему правильно связать ЗУ и батарею, то теперь пожалуй я склонюсь к вашей точке зрения.
_______________________
P.S. Запрос какой то диковинный , попробую применить. :) | |
|
|
|
|
|
|
|
для: romu4-
(29.04.2009 в 18:59)
| | >Если вы сейчас скажите что по-вашему правильно связать ЗУ и батарею, то теперь пожалуй я склонюсь к вашей точке зрения.
Боже упаси. Просто мне показалось странным, что в свойствах зарядки указывается количество батарей.
Раз меняться может количество батарей, значит в зарядку втыкаются батареи а не рации.
Фактически, если некая штуковина подключается к рации и заряжает батарею в ней, то зарядным устройством следует считать саму рацию, а штуковину - лишь источником питания этого самого "зарядного устройства".
У [как инимум некоторых] мобильников зарядные устройства и автономные есть. | |
|
|
|
|
|
|
|
для: Trianon
(29.04.2009 в 19:11)
| | Кроме того теперь обработка запроса стала долгой , в каждой таблице менее 5 записей.
Что будет если их будет по 30 допустим.
Можно ли сделать выборку этих данных используя три разных запроса и затем проанализировать их результаты средствами PHP? После чего сделать вывод на экран в виде таблицы? Или это менее эффективно? | |
|
|
|
|
|
|
|
для: romu4-
(29.04.2009 в 19:46)
| | Как выглядит дамп структуры таблиц?
А лучше - полный дамп вообще, уж коль скоро там всего по пять позиций?
Мне почему-то кажется, что индексы в нем отсутствуют напрочь.
Можно и на уровне php всё это сделать.
Но пока у Вас применяектся do-while, мне сказать нечего. | |
|
|
|
|
|
|
|
для: Trianon
(29.04.2009 в 19:57)
| | Я могу Вам показать (отправить) полную структуру базы данных.
Если это поможет...
Индексацию применяю в принципе везде, где необходимо.
В данном случае элементы таблиц являются частью составного ключа, который и так индексируется, по-моему конечно. | |
|
|
|
|
|
|
|
для: romu4-
(01.05.2009 в 16:08)
| | >В данном случае элементы таблиц являются частью составного ключа, который и так индексируется, по-моему конечно.
если составной индекс создан, то индексируется обращение по полному ключу и по первому его элементу. По второму - с чего бы? | |
|
|
|
|
|
|
|
для: Trianon
(29.04.2009 в 19:57)
| | > Уберите do while. Ему здесь не место.
> Но пока у Вас применяется do-while, мне сказать нечего.
Здравствуйте, Trianon!
Все хотел спросить: "Чем плох цикл do-while?".
Лучше использовать WHILE {}? Или есть что-нибудь эффективней и лучше? | |
|
|
|
|
|
|
|
для: romu4-
(02.05.2009 в 07:40)
| | do-while ориентирован на ситуации, когда логикой совершенно однозначно задано выполнение оператора цикла как минимум один раз.
Чтение курсора результата sql-запроса к таким ситуациям не относится. | |
|
|
|
|
 99 Кб |
|
|
для: Trianon
(29.04.2009 в 18:41)
| | Выборка не производится, отображаются только поля из таблицы r_models.
Возможно я не правильно произвожу вывод, хотя с моими простяцкими запросами поля заполнялись, только не соответствовали истине.
Поглядите пожалуйста код - правильно ли я применил запрос и вывод его результата.
Результат на скринсшоте.
<body>
<?php
echo ("Список моделей радиостанций:<br><br>");
// Соединение с базой даных
require_once ("config.php");
// Делается выборка из таблиц базы данных
$query ="SELECT m.*, bls, cls
FROM r_models m
LEFT JOIN
(SELECT r_model AS brm, GROUP_CONCAT(b_model SEPARATOR ',') AS bls FROM r_b) AS sb ON r_model = brm
LEFT JOIN
(SELECT r_model AS crm, GROUP_CONCAT(c_model SEPARATOR ',') AS cls FROM r_c) AS sc ON r_model = crm ";
$result = mysql_query ($query,$dbcon);
$myrow = mysql_fetch_array ($result);
// Я пробовал по разному- много разных запросов и один запрос с подзапросами
//$queryb ="SELECT * FROM r_b";
//$resultb = mysql_query ($queryb,$dbcon);
//$myrowb = mysql_fetch_array ($resultb);
//$queryc ="SELECT * FROM r_c";
//$resultc = mysql_query ($queryc,$dbcon);
//$myrowc = mysql_fetch_array ($resultc);
// Вывод результата выборки на экран
?>
<table width="1200" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Модель радиостанции </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Стандарт радиостанции </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Стационарность </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Периодичность ТО </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Срок службы </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Используемые аккумуляторные батареи </strong></td>
<td align="center" valign="middle" bgcolor="#CCCCCC"><strong> Используемые зарядные устройства </strong></td>
</tr>
<?php
do
{
echo "<tr><td>".$myrow['r_model']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['standard']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['stationarity']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['period_to']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['life']."</td>";
echo "<td>".$myrow['b_model']."</td>";
//echo "<td>".$myrow['c_model']."</td></tr>"; ; В этих столбцах нужно вывести совместимые зарядники
}
while ($myrow = mysql_fetch_array ($result));
?>
</table>
</body>
|
| |
|
|
|
|
 5.5 Кб |
|
|
для: Trianon
(29.04.2009 в 18:41)
| | Добрый день, Trianon!
Я на некоторое время отвлекался от этого запроса и вот вернулся обратно.
Запрос не осуществляет правильной выборки из таблиц.
Не могли бы вы завершить начатое ;-) , а то мне без Вас никак не справиться!
Дамп прилагается!
<body>
<?php
include ("menu_top.php");
echo ("<div align=\"center\"> <p> <br> </p> <span class=\"StyleForHeader\">Список моделей радиостанций</span> <p> <br> </p>");
// Соединение с базой даных
require_once ("config.php");
// Делается выборка из таблиц базы данных
$query ="SELECT m.*, bls, cls
FROM r_models m
LEFT JOIN
(SELECT r_model AS brm, GROUP_CONCAT(b_model SEPARATOR ',') AS bls FROM r_b) AS sb ON r_model = brm
LEFT JOIN
(SELECT r_model AS crm, GROUP_CONCAT(c_model SEPARATOR ',') AS cls FROM r_c) AS sc ON r_model = crm ";
//$query ="SELECT r_models.*, r_b.b_model
//FROM r_models, r_b
//WHERE r_models.r_model=r_b.r_model";
$result = mysql_query ($query,$dbcon);
$myrow = mysql_fetch_array ($result);
if(!$result) exit("Error in $sqlu : ". mysql_error());
// Вывод результата выборки на экран
?>
<br>
<table width="100%" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
<tr>
<td width="14%" align="center" valign="middle" bgcolor="#CCCCCC"><strong> Модель радиостанции </strong></td>
<td width="10%" align="center" valign="middle" bgcolor="#CCCCCC"><strong> Стандарт радиосвязи </strong></td>
<td width="13%" align="center" valign="middle" bgcolor="#CCCCCC"><strong> Стационарность </strong></td>
<td width="11%" align="center" valign="middle" bgcolor="#CCCCCC"><strong> Периодичность ТО </strong></td>
<td width="9%" align="center" valign="middle" bgcolor="#CCCCCC"><strong> Срок службы (лет) </strong></td>
<td width="17%" align="center" valign="middle" bgcolor="#CCCCCC"><strong> Используемые аккумуляторные батареи </strong></td>
<td width="17%" align="center" valign="middle" bgcolor="#CCCCCC"><strong> Используемые зарядные устройства </strong></td>
<td width="9%" align="center" valign="middle" bgcolor="#CCCCCC"><strong>Действия</strong></td>
</tr>
<?php
do
{
echo "<tr><td align=\"center\" valign=\"middle\">".$myrow['r_model']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['standard']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['stationarity']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['period_to']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['life']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['bls']."</td>";
echo "<td align=\"center\" valign=\"middle\">".$myrow['cls']."</td>";
echo "<td align=\"center\" valign=\"middle\">
<a href=\"/r_models_update_form.php?r_model=".$myrow['r_model']."\">Редактировать </a><br>
<a href=\"/r_models_delete_form.php?r_model=".$myrow['r_model']."\">Удалить </a>
</td></tr>";
}
while ($myrow = mysql_fetch_array ($result));
?>
</table>
</body>
|
| |
|
|
|
|
 99 Кб |
|
|
для: Trianon
(29.04.2009 в 18:24)
| | Вот форма которую я вывожу. | |
|
|
|