Задавайте вопросы, мы ответим
Вы не зашли.
Возникла следующая проблемка по выборке определенной записи из двух таблиц:
таблица 1 (rubriki):
в которой имеется поле id - уникальный идентификатор, по этому id вытаскиваются определенные записи из таблицы
и таблица 2 (gallery):
где имеются группы фотографий принадлежащие разным товарам из первой таблицы.
Как сделать, чтобы по id первой таблицы можно было вытащить несколько фотографий из второй таблицы, и при изменении или удалении записи с первой таблицы, также удалялись записи и из второй таблицы. При этом разным товарам будет соответствовать разное количество фотографий во второй таблице, а у некоторых и вовсе отсутствовать.
Т.е. как можно организовать связь строки из первой таблицы и столбца из второй таблицы
Заранее спасибо...
Неактивен
Но во второй таблице будет содержаться информация не только по одной галерее, а по многим...
Т.е. получается, что например id с 1 по 6 второй таблицы содержат ссылки на один товар из первой таблицы, а 7 по 10 на другой товар из первой таблицы (с другим id из первой таблицы) и т.д. Другими словами возможно ли вообще такое решение?)
Неактивен
А что именно вас смущает?
У вас ведь не возникает вопросов по поводу того, что в первой таблице поле categoryname у разных групп id разное.
Или я не правильно вас понял?
Неактивен
Дело в том, что есть страница (предположим view_c) на ней представлена группа товаров, по каждым товаром имеется кнопка - подробнее, оформленная в виде ссылки (<a href='view_p.php?id=%s' title='Подробнее'>Подробнее</a>), где %s - это элемент цикла do...while в функции printf ("<a href='view_p.php?id=%s' title='Подробнее'>Подробнее</a>",$myarrayres_rubrika["id"]), вытаскивающий из таблицы rubriki информацию о товаре по этому id на новой странице (предположим view_p). Но у некоторых товаров (не всех) имеется в наличии еще и галерея, тоже на странице view_p, записи по которой представлены в таблице gallery. Этот момент я и не могу понять, т.е. при переходе со страницы view_c на страницу view_p, выборка из таблицы rubriki проходит на ура, т.е. информация отображается только для того товара, которому соответствует id в ссылке - Подробнее, а информация о галерее отображается для всех товаров одинаковая. Мне нужно сформировать такой запрос, чтобы при нажатии на ссылку открывалась страница с тем товаром, котором соответствует id в ссылке и если есть галерея, заданная в таблице gallery к этому товару, то выбирались именно те элементы этой таблицы, которые соответствуют товару. Как это сделать я никак не могу понять
////////////////////////////////////////////////
Код (страница view_c):
.......
<div id="hellomysite">
<h2>
<?php echo $myarrayres['text']; ?>
</h2>
</div>
<div class="tovar">
<span id="tovar2">
<!--соединение с базой для вывода элементов по рубрике товара-->
<?php
/*делаем выборку из базы данных*/
$res_rubrika = mysql_query("SELECT id,view,cena,categorynalichie,data,mini_image,big_image,title,vosrast
FROM rubriki WHERE categoryname='$methody'",$databasic);
/*проверка №1 - проверяем на правильность вывод данных в переменную $res_rubrika*/
if (!$res_rubrika)
{
echo "<p>Обращение к базе данных не состоялось. Оповестите об этом администратора по email:
..... <br />
<strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
/*проверка №2 - проверяем были ли данные вынесены из базы данных, т.е. существует хотя бы одно
значение в $res_rubrika*/
if (mysql_num_rows($res_rubrika) > 0)
{
/*вытаскиваем результаты запроса в переменную массив*/
$myarrayres_rubrika = mysql_fetch_array($res_rubrika);
/*открываем цикл для извлечения данных из таблицы базы данных*/
do
{
/*Маленькая проверка товара на наличие*/
if($myarrayres_rubrika["categorynalichie"] == 2)
{
$nalichie = "<br /><span id='tovar'>*Товар временно отсутствует*</span>";
}
printf (
"<table border='0' cellspacing='0' cellpadding='0' class='blockstylecentertwo' valign='top'>
<tr>
<td class='blockstyle1'><img src='image/topleftcentertwo.gif' width='10' height='10' /></td>
<td class='blockstyle2'><img src='image/toprightcentertwo.gif' width='10' height='10' /></td>
</tr>
<tr>
<td colspan='2' class='centerminiblock'><span id='name_tovar'>%s</span></td>
</tr>
<tr>
<td colspan='2' class='centerminiblockline'></td>
</tr>
<tr>
<td colspan='2' class='centerminiimage'>
<img src='%s' class='newtovarimage' />
</td>
</tr>
<tr>
<td colspan='2' class='zenabox'><span class='zena_tovara'>Цена %s рублей</span>$nalichie</td>
</tr>
<tr class='zenabox' align='center'>
<td>
<div id='sub4'>
<a href='sakas.php' title='Заказать'>
Заказать
</a>
</div>
</td>
<td>
<div id='sub5'>
<a href='view_p.php?id=%s' title='Подробнее'>
Подробнее
</a>
</div>
</td>
</tr>
<tr valign='bottom' class='zenabox'>
<td height='10' class='blockstyle1'><img src='image/bottomleftcentertwo.gif' width='10'
height='10' /></td>
<td class='blockstyle2'><img src='image/bottomrightcentertwo.gif' width='10' height='10'/></td>
</tr>
</table>", $myarrayres_rubrika["title"],$myarrayres_rubrika["mini_image"],
$myarrayres_rubrika["cena"],$myarrayres_rubrika["id"]);
}
while ($myarrayres_rubrika = mysql_fetch_array($res_rubrika));
}
else
{
echo "<p id='privets'>По данной рубрике нет ни одной записи</p>";
}
?>
.......
////////////////////////////////////////////////
фрагмент кода (страница view_p):
.......
if(isset($_GET['id']))
{
$id = $_GET['id'];
}
/*защита от ввода в строке браузера ссылки без присвоенного значения переменной $methody*/
if(!isset($id))
{
$id = 1;
}
/*делаем выборку из базы данных*/
$res = mysql_query("SELECT * FROM rubriki WHERE id='$id'",$databasic);
/*проверка №1 - проверяем на правильность вывод данных в переменную $res*/
if (!$res)
{
echo "<p>Обращение к базе данных не состоялось. Оповестите об этом администратора по email: ..... <br />
<strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
/*проверка №2 - проверяем были ли данные вынесены из базы данных, т.е. существует хотя бы одно значение в $res*/
if (mysql_num_rows($res) > 0)
{
/*вытаскиваем результаты запроса в переменную массив*/
$myarrayres = mysql_fetch_array($res);
/*реализуем счетчик просмотров товара*/
$new_view = $myarrayres["view"] + 1;
mysql_query("UPDATE rubriki SET view='$new_view' WHERE id='$id'",$databasic);
}
else
{
echo "<p>Данные из базы по неизвестной причине не извлекаются. Оповестите об этом администратора по
email: ....</p>";
exit();
}
.......................................................
<?php
/*Маленькая проверка товара на наличие*/
if($myarrayres["categorynalichie"] == 2)
{
$nalichie = "<span id='tovar2'>*Товар временно отсутствует*</span>";
printf("
<img src='%s' class='podrobnee_image'>
<p class='podrobnee_opisanie'>Описание товара:</p>
<p class='podrobnee_block'>
Дата добавления товара: %s<br />
Количество просмотров: %s
</p>
<div class='podrobnee_text'>%s</div>
<div align='center'>
<div class='podrobnee_cena'>Цена товара %s рублей</div>
$nalichie
<div id='sub7'>
<a href='soobshenie.php' title='Сообщить о доставке по электронной почте'>Заказать</a>
</div>
</div>",$myarrayres["big_image"],$myarrayres["data"],$myarrayres["view"],$myarrayres["text"],
$myarrayres["cena"]);
}
else
{
printf("
<img src='%s' class='podrobnee_image'>
<p class='podrobnee_opisanie'>Описание товара:</p>
<p class='podrobnee_block'>
Дата добавления товара: %s<br />
Количество просмотров: %s
</p>
<div class='podrobnee_text'>%s</div>
$nalichie
<div align='center'>
<div class='podrobnee_cena'>Цена товара %s рублей</div>
<div id='sub6'><a href='sakas.php' title='Заказать'>Заказать</a></div>
</div>",$myarrayres["big_image"],$myarrayres["data"],$myarrayres["view"],$myarrayres["text"],
$myarrayres["cena"]);
}
?>
.......................................................
<?php
/*делаем выборку из базы данных*/
$res_gallery = mysql_query("SELECT * FROM gallery",$databasic);
/*проверка №1 - проверяем на правильность вывод данных в переменную $res_gallery*/
if (!$res_gallery)
{
echo "<p>Обращение к базе данных не состоялось. Оповестите об этом администратора по email: Lexluterking@ya.ru <br />
<strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
/*проверка №2 - проверяем были ли данные вынесены из базы данных, т.е. существует хотя бы одно значение в $res*/
if (mysql_num_rows($res_gallery) > 0)
{
/*вытаскиваем результаты запроса в переменную массив*/
$myarrayres_gallery = mysql_fetch_array($res_gallery);
}
else
{
echo "<p>Данные из базы по неизвестной причине не извлекаются. Оповестите об этом администратора по
email: .....</p>";
exit();
}
do
{
print_f("<li>%s</li>",$myarrayres_gallery["gallery_sapisi"])
}
while ()
?>
..............
Неактивен
1) добавляем в таблицу галереи ещё одну колонку, например product_id. В эту колонку пишем id товара, которому принадлежит фотография.
|id|product_id|gallery_sapisi|
----------------------------
|1| 2 |sdkfjsdkf.jpg|
|2| 2 |ashdjhsjdj.jpg|
|3| 4 |sdfksdjf.jpg|
|4| 4 |sdjfksdhfhj.jpg|
....
В этом случае у нас две фотки принадлежит товару с ИД = 2 и две товару с ИД = 4
Далее, когда заходим посмотреть подробную информацию о конкретном товаре, выбираем для него все фотки таким запросом:
SELECT gallery_sapisi FROM gallery WHERE product_id = <ид_товара>
if (mysql_num_rows($result) > 0)
{
выводим циклом на экран галлерею.
}
3) ставим индекс на поле product_id в таблице gallery, заходим в связи и связываем с таблицей товаров и полем ИД (products.id) - (ON DELETE CASCADE, ON UPDATE CASCADE). В этом случае при удалении товара удалятся все записи где product_id будет равен ИД товара. Важно! обе таблицы должны быть InnoDB.
4) Прежде чем удалить какой-то товар, сначала выбираем название всех фоток из галереи, далее циклом удаляем файлы фоток: if(is_file(файл)) unlink(файл)
после этого DELETE FROM products WHERE id = <ид_товара> LIMIT 1
Вот наверное и всё.
Неактивен
А вообще это тоже самое что категории и товары. связь один ко многим. Ведь Вы же выбираете нужные товары в зависимости от категории. С фотками тоже самое только они зависят от товара.
Неактивен
Ok, Спасибочки. А то совсем заморочился... Наверное пора прекращать работать по ночам
Неактивен
не получаться сделать связь между таблицами пожалуйста помогите:
$result4 = mysql_query("CREATE TABLE `rub` (
`rub_id` int(11) NOT NULL auto_increment,
`rub_name` varchar(15) NOT NULL,
PRIMARY KEY `rub_id` (rub_id)
)",$msconnect) or die('Таблица rub не создана!<br>');
if($result4=="1") echo 'Таблица rub создана!<br>';
$result = mysql_query("CREATE TABLE `nedviz_ichu_companiona`(
`id` int(11) NOT NULL auto_increment PRIMARY KEY,
`shews` text NOT NULL,
`users_id` int(11) NOT NULL,
`contact_id` int(11) NOT NULL,
`region_id` int(11) NOT NULL,
`town_id` int(11) NOT NULL,
`date` date NOT NULL,
`rub_id` int(11) NOT NULL,
`oplata_id` int(11) NOT NULL,
`del` int(2) NOT NULL,
FOREIGN KEY (`rub_id`) REFERENCES `rub`(`rub_id`)
)",$msconnect) or die('Таблица не создана!<br>');
if($result=="1") echo 'Таблица создана!<br>';
Неактивен
Уточните о какой связи идет речь. Если о невозможности создать внешний ключ, то убедитесь, что таблицы innodb и если да, то приводите текст ошибки и результат выполнения show innodb status сразу после получения ошибки.
Неактивен