Прошу прощения за мой ужасный аспект кодирования и дизайна. Я не слишком беспокоюсь о его внешнем виде, поскольку я знаю, как хорошо он работает.Получение нескольких результатов из предложения WHERE в PHP
У меня есть 2 стола (автомобили, клиенты), в которых оба имеют колонки VIN. Когда я добавляю новый автомобиль, я ставлю VIN, и когда клиент покупает автомобиль, я выбираю VIN из раскрывающегося списка, который заполняется во всех автомобилях, с полем VSold устанавливается значение «N». Это отлично работает, проблема заключается в том, что когда я запускаю код ниже, он дает мне несколько имен клиентов. Когда я запускаю поисковый запрос в этой базе данных для этой таблицы и точный VIN, есть только один клиент, у которого есть соответствующий VIN (я сделал его UNIQUE), но в моем уродливом коде он дает мне кучу результатов, все равно автомобиль, просто разные клиенты. Что я здесь делаю неправильно? Как я могу это очистить?
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn) {
die('Could not connect: ' . mysql_error());
}
$VIN=$_POST['formVIN'];
$sql =
"SELECT
Cars.VIN, Cars.VYear, Cars.VMake, Cars.VModel,
Cars.VOdometer, Cars.VPurchasedPrice, Cars.VPurchasedDate,
Cars.VSold, Cars.VSoldPrice, Cars.VSoldDate, Cars.VSalesPerson,
Customers.CustFirst, Customers.CustLast
FROM
Cars, Customers
WHERE Cars.VIN='$VIN'";
mysql_select_db('dbCar2016');
$retval = mysql_query($sql, $conn);
if(! $retval) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Information on record for the VIN provided:<br><br>";
echo "VIN:" . $row["VIN"] . "<br>";
echo "Year:" . $row["VYear"] . "<br>";
echo "Make:" . $row["VMake"] . "<br>";
echo "Model:" . $row["VModel"] . "<br>";
echo "Odometer:" . $row["VOdometer"] . "<br>";
echo "Purchased Price:$" . $row["VPurchasedPrice"] . "<br>";
echo "Purchased Date:" . $row["VPurchasedDate"] . "<br><br>";
if ($row["VSold"]=='Y') {
echo "This Vehicle sold.<br>";
echo "Price Sold:" . $row["VSoldPrice"] . "<br>";
echo "Date Sold:" . $row["VSoldDate"] . "<br>";
echo "Sales Person:" . $row["VSalesPerson"] . "<br><br>";
echo "It was sold to<br>";
echo "Customer Name:" . $row["CustFirst"] . " " . $row["CustLast"] . "<br>";
} else {
echo "This Vehicle has not sold yet.<br>";
}
echo "<p>VIN Successfully Searched</p>";
}
echo "<a href=vinlookup.php>Search Another VIN</a>";
mysql_close($conn);
?>
Когда я положил VIN в виде vehichle не проданное (VSold = 'N'), у меня нет какого-либо вопроса. (Я думаю ...) Я попытался использовать СОЮЗ между таблицами, но меня еще больше перепутало.
Заранее благодарим за помощь!
UPDATE:
UPDATE
Cars SET VSold='Y',
VSoldPrice='$VSoldPrice',
VSoldDate='$CustDownDate',
VSalesPerson='$VSalesPerson'
WHERE
VIN='$VIN'
Это то, что у меня есть на странице, что я добавить клиентов в. Он вносит всю информацию о клиентах (CustFirst, CustLast и т. Д.) В таблицу Customers. Таким образом, никакие клиенты.VIN никогда не будут заполнены, если не было клиента, связанного с любым VIN (Cars.VIN).
Я впечатлен тем, что есть люди, которые используют библиотеку mysql_ * без проверок впрыска. 'ВЫБРАТЬ с. *, b.CustFirst, b.CustLast ОТ Автомобили с LEFT JOIN Клиенты б ON c.VIN = b.VIN WHERE c.VIN = $ VIN' или просто JOIN в зависимости от того, хотите ли у для включения результатов без покупателей или всего. – Prix
@Prix, то вы будете впечатлены большим количеством пользователей StackOverflow ;-) – Martin
Cesar - MySQL теперь DEPRECATED и больше не поддерживается PHP7, вы должны с крайним предубеждением прекратить его использовать и вместо этого изучить MySQLi или PDO. Ваш код также развивался бы в прыжках и ограничениях, если бы вы исследовали и начали внедрять подготовленные заявления, а не текущую «аналоговую» реализацию SQL-запросов с PHP – Martin