我在线看到了一个教程。但是当我选择桌子时,我不明白U.的意思。它还将U和T隐藏在表名中。 U和T来自哪里?为什么编码器放U和T.请澄清我,谢谢! 表没有这样的名字。美国是否意味着加入?或者是其他东西? 我把这个例子放在下面。
CREATE TABLE phpro_tags (
tag_id INT(11) NOT NULL auto_increment,
tag_name varchar(30) NOT NULL,
PRIMARY KEY (tag_id),
UNIQUE KEY tag_name (tag_name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE phpro_tag_types (
tag_type_id INT(1) NOT NULL auto_increment,
tag_type_name varchar(30) NOT NULL,
PRIMARY KEY (tag_type_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE phpro_tag_targets (
tag_target_id INT(11) NOT NULL auto_increment,
tag_id INT(11) NOT NULL ,
tag_target_name varchar(30) NOT NULL,
tag_target_url varchar(255) NOT NULL,
tag_type_id INT(1) NOT NULL,
PRIMARY KEY (tag_target_id),
FOREIGN KEY (tag_id) REFERENCES phpro_tags(tag_id) ON DELETE CASCADE,
FOREIGN KEY (tag_type_id) REFERENCES phpro_tag_types(tag_type_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
<?php
$tag_target_url = 'http://phpro.org/tutorials/Managing-Hierarchical-Data-with-PHP-and-MySQL.html';
try
{
include 'db.class.php';
$sql = "
SELECT U.*
FROM phpro_tag_targets U
JOIN phpro_tag_targets T
WHERE
U.tag_id = T.tag_id
AND T.tag_target_url = :tag_target_url
GROUP BY tag_target_url";
$stmt = db::getInstance()->prepare($sql);
$stmt->bindParam(':tag_target_url', $tag_target_url);
$stmt->execute();
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
/*** loop over the array and create the listing ***/
$msg = '<ul>';
foreach($res as $val)
{
$msg .= '<li><a href="'.$val['tag_target_url'].'">'.$val['tag_target_name'].'</a></li>'."\n";
}
$msg .= '</ul>';
}
catch(Exception $e)
{
$msg = 'Unable to process tag type';
}
?>
<?php echo $msg; ?>
答案 0 :(得分:1)
更好的答案是U和T是在查询的FROM部分中定义的别名。然后,您可以将它们用作U.columnname或T.columnname来缩短您的输入。在这种情况下,需要别名,因为它们将表连接到自身。
答案 1 :(得分:0)
正如您的问题所关注的那样,“U”是从中检索数据的表的名称。并且“U. *”表示检索表“U”的每一列。它有时用作U.Id,U.name。