Php 我如何在1或2中获得所有兄弟?
如何在1 sql或2 sql中获得所有兄弟?Php 我如何在1或2中获得所有兄弟?,php,mysql,Php,Mysql,如何在1 sql或2 sql中获得所有兄弟? 哪个更快?哪个对我的网站有好处? 如何在一个sql中实现这一点?有人能帮我写这个sql吗? SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `p` -- ---------------------------- DROP TABLE IF EXISTS `p`; CREATE TABLE `p` ( `id` int(10) NOT
哪个更快?哪个对我的网站有好处?
如何在一个sql中实现这一点?有人能帮我写这个sql吗?
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `p`
-- ----------------------------
DROP TABLE IF EXISTS `p`;
CREATE TABLE `p` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(200) default NULL,
`categories_id` int(10) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of p
-- ----------------------------
INSERT INTO `p` VALUES ('1', 'jimmy', '1');
INSERT INTO `p` VALUES ('2', 'tina', '1');
INSERT INTO `p` VALUES ('3', 'dd', '1');
INSERT INTO `p` VALUES ('4', 'hello', '1');
INSERT INTO `p` VALUES ('6', 'slucky', '1');
INSERT INTO `p` VALUES ('7', 'asdf2', '223');
INSERT INTO `p` VALUES ('8', 'sdaf3', '22');
INSERT INTO `p` VALUES ('9', '2dfg', null);
INSERT INTO `p` VALUES ('12', 'asdf', '1');
INSERT INTO `p` VALUES ('13', 'dsdf', null);
php代码:
<?php
// get categories_id first
$select_sql="select * from p where id = 3";
$result=$db->execute($select_sql);
$categories_id = $result->fields['categories_id'];
// get all records has the same categories_id with id = 3
$select_sql="select * from p where categories_id = ".$categories_id;
$result=$db->execute($select_sql);
// output all brother categories
while(!$result->EOF){
echo $result->fields['name'].'<br>';
$result->MoveNext();
}
?>
查询将是
SELECT * FROM p WHERE categories_id IN (
SELECT group_concat(categories_id)
FROM p
WHERE id = 3)
您必须先使用子查询获取类别id
,然后将其结果传递给上层查询。查询将被删除
SELECT * FROM p WHERE categories_id IN (
SELECT group_concat(categories_id)
FROM p
WHERE id = 3)
SELECT * FROM `p` main
LEFT JOIN `p` helper ON helper.categories_id = main.categories_id
WHERE main.id = 3
您必须首先使用子查询获取类别\u id
,并将其结果传递给上级查询
SELECT * FROM `p` main
LEFT JOIN `p` helper ON helper.categories_id = main.categories_id
WHERE main.id = 3
您可以联接表以选择数据。据我所知,在大多数情况下,加入一张桌子更快,但约格什的答案也是正确的
您可以联接表以选择数据。据我所知,在大多数情况下,加入一个表的速度更快,但Yogesh的答案也是正确的。这个简单的代码可以做到这一点
$select_sql="select * from p where categories_id = id and id=3";
$result=$db->execute($select_sql);
while(!$result->EOF){
echo $result->fields['name'].'<br>';
$result->MoveNext();
}
?>
$select_sql=“select*from p,其中类别为id=id和id=3”;
$result=$db->execute($select\u sql);
而(!$result->EOF){
echo$result->fields['name']。
;
$result->MoveNext();
}
?>
这个简单的代码就可以了
$select_sql="select * from p where categories_id = id and id=3";
$result=$db->execute($select_sql);
while(!$result->EOF){
echo $result->fields['name'].'<br>';
$result->MoveNext();
}
?>
$select_sql=“select*from p,其中类别为id=id和id=3”;
$result=$db->execute($select\u sql);
而(!$result->EOF){
echo$result->fields['name']。
;
$result->MoveNext();
}
?>
使用左外连接
select p.id, p.name, p.categories_id from p sql1 left outer join p on sql1.categories_id = p.categories_id where sql1.id = 3
使用左外连接
select p.id, p.name, p.categories_id from p sql1 left outer join p on sql1.categories_id = p.categories_id where sql1.id = 3
我认为您不会在2个查询中遇到任何性能问题。 但您可以通过一个查询选择所需的信息
SELECT p.*
FROM (
SELECT categories_id
FROM p
WHERE id = 3
) AS cat
LEFT JOIN p ON p.categories_id = cat.categories_id
ORDER BY id ASC;
其结果是:
+------+--------+---------------+
| id | name | categories_id |
+------+--------+---------------+
| 1 | jimmy | 1 |
| 2 | tina | 1 |
| 3 | dd | 1 |
| 4 | hello | 1 |
| 6 | slucky | 1 |
| 12 | asdf | 1 |
+------+--------+---------------+
6 rows in set (0.00 sec)
+------+--------+---------------+
|id |名称|类别| id|
+------+--------+---------------+
|1 |吉米| 1|
|2 |蒂娜| 1|
|3 | dd | 1|
|4 |你好| 1|
|6 | slucky | 1|
|12 | asdf | 1|
+------+--------+---------------+
一组6行(0.00秒)
我认为您不会在2个查询中遇到任何性能问题。 但您可以通过一个查询选择所需的信息
SELECT p.*
FROM (
SELECT categories_id
FROM p
WHERE id = 3
) AS cat
LEFT JOIN p ON p.categories_id = cat.categories_id
ORDER BY id ASC;
其结果是:
+------+--------+---------------+
| id | name | categories_id |
+------+--------+---------------+
| 1 | jimmy | 1 |
| 2 | tina | 1 |
| 3 | dd | 1 |
| 4 | hello | 1 |
| 6 | slucky | 1 |
| 12 | asdf | 1 |
+------+--------+---------------+
6 rows in set (0.00 sec)
+------+--------+---------------+
|id |名称|类别| id|
+------+--------+---------------+
|1 |吉米| 1|
|2 |蒂娜| 1|
|3 | dd | 1|
|4 |你好| 1|
|6 | slucky | 1|
|12 | asdf | 1|
+------+--------+---------------+
一组6行(0.00秒)
您的模式中有
id
、name
和categories\u id
。“兄弟”到底是什么?!?同一类别的人?你听说过sql注入吗?!要分析自己的代码有那么难吗?为什么有人要为你写代码?你的模式中有id
、name
和categories\u id
。“兄弟”到底是什么?!?同一类别的人?你听说过sql注入吗?!要分析自己的代码有那么难吗?为什么有人要给你写代码?