<?php
// определяем начальные данные
$db_host = 'localhost';
$db_name = 'decor';
$db_username = 'username';
$db_password = 'password';
$db_table_to_show = 'product_descr, product WHERE product_descr.name > product.image';
$row = mysql_fetch_array($result);
// соединяемся с сервером базы данных
$connect_to_db = mysql_connect($db_host, $db_username, $db_password)
or die("Could not connect: " . mysql_error());
// подключаемся к базе данных
mysql_select_db($db_name, $connect_to_db)
or die("Could not select DB: " . mysql_error());
// выбираем все значения из таблицы "student"
$qr_result = mysql_query("select * from " . $db_table_to_show)
or die(mysql_error());
// выводим на страницу сайта заголовки HTML-таблицы
echo '<table border="1">';
echo '<thead>';
echo '<tr>';
echo '<th>Название</th>';
echo '<th>Фото</th>';
echo '<th>Посмотреть</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
// выводим в HTML-таблицу все данные клиентов из таблицы MySQL
while($data = mysql_fetch_array($qr_result)){
echo '<tr>';
echo '<td>' . $data['name'] . '</td>';
echo '<td><img src="/image/' . $data['image'] . '" width="100"></td>';
echo '<td><a href="/" target="blank">Перейти в магазин</a></td>';
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
// закрываем соединение с сервером базы данных
mysql_close($connect_to_db);
?>
Продукты и название выводятся, но вместо 30 их выводится пару сотен Что в коде не так?
Вывод сделал
Пробую делать пагинацию Из одной таблицы я смог сделать постраничный вывод А вот как сделать вывод из двух таблиц не пойму. Прошу помощи. Вот сам код
<?php
// Соединиться с сервером БД
mysql_connect("localhost", "user", "pass") or die (mysql_error ());
mysql_query("SET NAMES utf8");
// Выбрать БД
mysql_select_db("basa_name") or die(mysql_error());
$stSQL = "SELECT product_descr.name, product.image FROM product_descr
JOIN product
ON product.product_id = product_descr.product_id";
// Выполнить запрос (набор данных $rs содержит результат)
$rs = mysql_query($stSQL);
// Цикл по recordset $rs
// Каждый ряд становится массивом ($row) с помощью функции mysql_fetch_array
while($row = mysql_fetch_array($rs)) {
// Записать значение столбца image (который является теперь массивом $row)
echo '<div class="product"><div class="product_img">';
echo '<img src="https://site/image/' . $row['image'] . '">';
echo '</div>';
echo '<div class="product_name">';
echo $row['name'];
echo '</div>';
echo '<div class="product_search">';
echo '<a href="https://site/search/?search=' . $row['name'] . '" target="blank">Посмотреть</a>';
echo '</div>';
echo '</div>';
}
?>
<?
// Закрыть соединение с БД
mysql_close();
?>
Есть такая интересная штука, как реляционная алгебра. Так вот, реляционная алгебра базируется на теории множеств и является основой логики работы реляционных баз данных. Язык SQL является реляционно полным, так как по выразительной силе не уступает реляционной алгебре (или, что то же самое, реляционному исчислению), т.е. любой оператор реляционной алгебры может быть выражен средствами этого языка.
Жил был такой человек Эдгар Кодд. Он предложил вариант реляционной алгебры, который, включает в себя следующие основные операции: объединение, разность (вычитание), пересечение, декартово (прямое) произведение (или произведение), выборка (селекция, ограничение), проекция, деление и соединение.
SELECT *
FROM product_descr,
product
WHERE product_descr.name > product.image
Я не особо понимаю, что вы хотите сделать условием product_descr.name > product.image? Но подобный запрос в реляционной алгебре называется "Декартово произведение", когда каждая строчка одной таблицы сопоставляется с каждой строчкой другой таблицы. Кстати общепринятое обозначение выглядит вот так:
A × B = {(a; b) | a ∈ A, b ∈ B}
У вас вместо тридцати - сотни - это по законам математики. Количество элементов в декартовом произведении равно произведению чисел элементов множеств-сомножителей (в случае их конечности, разумеется):
|A×B|=|A|⋅|B|
По сути, вы просто перемножили две таблицы и поэтому так много данных...Вам нужно выполнять операцию пересечения таблиц по определенному полю, а не перемножать их.
MySQL это не нейронная сеть, она не знает по какому полю объединять поля. Хотя когда-нибудь вероятно научиться...
А пока пользуйтесь операцией JOIN и стройте запрос следующего вида:
SELECT *
FROM product
JOIN product_descr ON product_descr.product_id = product.id
А если полей в таблице product_descr может быть несколько объединяйте через GROUP BY и предположим объединяйте поля через какой-нить оператор GROUP_CONCAT:
SELECT product.*,
GROUP_CONCAT (product_descr.description)
FROM product
JOIN product_descr ON product_descr.product_id = product.id
GROUP BY product.id
Или выбирайте первым запросом все записи и фильтруйте/выводите их на клиенте по необходимости.
Не стесняемся и читаем следующие материалы по MySQL для того, чтобы разбираться в построении запросов:
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости