我正在构建一个项目,并希望从三个不同的表中检索数据,所以我正在使用INNER JOIN,但只是计算出它是重复数据,下面是它当前正在做的事情
Name: Ian Haney
First Line of Address: 12C Barclays Bank Chambers
Second Line of Address: Broadway North
Town: Pitsea
County: Essex
Postcode: SS13 3AU
Telephone Number: 01268 206297
Mobile Number: 07538 503276
Car Model: Jeep
Car Number Plate: AB10 1AB
Insurance expiry date: 30 July 2015
Name: Ian Haney
First Line of Address: 12C Barclays Bank Chambers
Second Line of Address: Broadway North
Town: Pitsea
County: Essex
Postcode: SS13 3AU
Telephone Number: 01268 206297
Mobile Number: 07538 503276
Car Model: Jeep
Car Number Plate: AB10 1AB
Tax expiry date: 30 June 2015
我想要的是以下
Name: Ian Haney
First Line of Address: 12C Barclays Bank Chambers
Second Line of Address: Broadway North
Town: Pitsea
County: Essex
Postcode: SS13 3AU
Telephone Number: 01268 206297
Mobile Number: 07538 503276
Car Model: Jeep
Car Number Plate: AB10 1AB
Tax expiry date: 30 June 2015
Insurance expiry date: 30 July 2015
MOT expiry date: 30 August 2015
有可能吗?
我的编码在
之下<?php
if (logged_in() == false) {
redirect_to("login.php");
} else {
if (isset($_GET['id']) && $_GET['id'] != "") {
$id = $_GET['id'];
} else {
$id = $_SESSION['user_id'];
}
## connect mysql server
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
# check connection
if ($mysqli->connect_errno) {
echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
exit();
}
## connect mysql server
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
# check connection
if ($mysqli->connect_errno) {
echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
exit();
}
## query database
# fetch data from mysql database
$sql = "SELECT v.visitor_id, visitor_name, visitor_email, visitor_firstline, visitor_secondline, visitor_town, visitor_county, visitor_postcode, visitor_tel, visitor_mobile, visitor_model, visitor_plate, item.description, renewal_id, DATE_FORMAT(renewal_date, '%e %M %Y') as datedue, renewal_date FROM visitors v
INNER JOIN renewal USING (visitor_id)
INNER JOIN item USING (item_id)
WHERE renewal_date >NOW()";
if ($result = $mysqli->query($sql)) {
$user = $result->fetch_array();
} else {
echo "<p>MySQL error no {$mysqli->errno} : {$mysqli->error}</p>";
exit();
}
if(mysqli_num_rows($result)) {
//fetch the data from the database
while ($row = mysqli_fetch_array($result)) {
# echo the user profile data
/*echo "<p>User ID: {$user['id']}</p>";*/
echo "<p>Name: {$user['visitor_name']}</p>";
echo "<p>First Line of Address: {$user['visitor_firstline']}</p>";
echo "<p>Second Line of Address: {$user['visitor_secondline']}</p>";
echo "<p>Town: {$user['visitor_town']}</p>";
echo "<p>County: {$user['visitor_county']}</p>";
echo "<p>Postcode: {$user['visitor_postcode']}</p>";
echo "<p>Telephone Number: {$user['visitor_tel']}</p>";
echo "<p>Mobile Number: {$user['visitor_mobile']}</p>";
echo "<p>Car Model: {$user['visitor_model']}</p>";
echo "<p>Car Number Plate: {$user['visitor_plate']}</p>";
echo "<p>" . $row['description'] . " expiry date: " . $row['datedue'] . "</p>\n";
}
} else { // 0 = invalid user id
echo "<p><b>Error:</b> Invalid user ID.</p>";
}
}
?>
答案 0 :(得分:0)
这需要工作:
SELECT v.visitor_id, visitor_name, visitor_email, visitor_firstline, visitor_secondline, visitor_town, visitor_county, visitor_postcode, visitor_tel, visitor_mobile, visitor_model, visitor_plate, item.description, renewal_id, DATE_FORMAT(renewal_date, '%e %M %Y') as datedue, renewal_date FROM visitors v
INNER JOIN renewal on (v.vistor_id = renewal.visitor_id)
INNER JOIN item on (v.vistor_id = item.visitor_id)
WHERE renewal_date >NOW()
链接3个表会导致你需要先扭曲2个表然后连接第3个表所需的性能不佳:
select a.* from (
SELECT v.visitor_id, visitor_name, visitor_email, visitor_firstline, visitor_secondline, visitor_town, visitor_county, visitor_postcode, visitor_tel, visitor_mobile, visitor_model, visitor_plate, item.description, renewal_id, DATE_FORMAT(renewal_date, '%e %M %Y') as datedue, renewal_date FROM visitors v
INNER JOIN renewal on (v.vistor_id = renewal.visitor_id) ) as a
INNER JOIN item on (a.vistor_id = item.visitor_id)
WHERE renewal_date >NOW()
答案 1 :(得分:0)
啊,对不起,我有点困惑,所以它看起来像这样
$sql = "SELECT a.* from (
SELECT v.visitor_id, visitor_name, visitor_email, visitor_firstline, visitor_secondline, visitor_town, visitor_county, visitor_postcode, visitor_tel, visitor_mobile, visitor_model, visitor_plate, item.description, renewal_id, DATE_FORMAT(renewal_date, '%e %M %Y') as datedue, renewal_date FROM visitors v
INNER JOIN renewal on (v.vistor_id = renewal.visitor_id) ) as a
INNER JOIN item on (a.vistor_id = item.visitor_id)
WHERE renewal_date >NOW()";