Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我如何在1或2中获得所有兄弟?_Php_Mysql - Fatal编程技术网

Php 我如何在1或2中获得所有兄弟?

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

如何在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 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注入吗?!要分析自己的代码有那么难吗?为什么有人要给你写代码?