添加朋友, 数据库设计 与 实现

数据库设计:

用户信息表: 

create table user(
id int auto_increment,
name varchar(20),
primary key (id)
);
关系表:
create table FriendRelation(
id int  primary key  auto_increment,
id_left int(5),
id_right int(5)
);

数据库信息展示: 

注意: 插入数据库时,保证数据,左边的 id_left < id_right , 这个样子防止数据冗余,

        假如,不这个样子的话,添加一个好友,要向数据库中插入两次数据

查询好友的php代码:

查询思路分析: 查找 id_left =要查的id ,将结果取出来,然后查找 id_right =要查找的id , 然后将两次的结果合并起来,即为id的所有好友 ....

<?php
// conncet to database
$mysqli=new mysqli(‘127.0.0.1‘,‘root‘,‘root‘,‘friends‘) or die (‘Can not connect to mysqli‘);  // use your own message

    $sql=‘select id_right from friendrelation where id_left=5‘;  //每次查询执行两次查询 , 这个是第一步;
    $result=$mysqli->query($sql);
    $res=array();

    foreach($result as $v){
        $res[]=$v;
    }

    $sql2=‘select id_left from friendrelation where id_right=5‘; // 这个是第二步查询  ,  然后将两次查询的结构拼接到一起;
    $result2=$mysqli->query($sql2);

    foreach($result2 as $v){
        $res[]=$v;
    }

    foreach($res as $v){
        foreach ($v as $key => $value) {
            $sql3="select name from user where id=$value";
            $result3=$mysqli->query($sql3);

            foreach ($result3 as $key => $value) {
                echo "name is : ".$value[‘name‘]."\n";
            }
         }
    }
时间: 2024-10-17 13:36:04

添加朋友, 数据库设计 与 实现的相关文章

Hibernate为表字段添加备注信息,便于理解数据库设计

java实体类,可以加上字段的描述,是个好的习惯吧,便于理解数据库设计,为后期维护,升级,改造提供支持

从零开始编写自己的C#框架(9)——数据库设计与创建

对于千万级与百万级数据库设计是有所区别的,由于本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合:空间换性能:空间换开发效率:减少null异常......当然不同的公司与项目要求不同,初学者要学会适应不同的项目开发要求,使用本框架开发时,必须严格按照本章节的要求来设计数据库,不然可能会产生不可控的异常. 从零开始编写自己的C#框架 数据库设计规范   文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文件标识: C#框架 当前版本

User、Role、Permission数据库设计ABP

ABP 初探 之User.Role.Permission数据库设计 (EntityFramework 继承的另一种使用方法) 最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助. 上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用EntityFramework已经有段时间了,基于ABP这样的设计还是第一次看到,具体应用场景1:N,ABP权限设计,菜单的权限可以分配置给角色,也可以直接分配给用户. 另一

数据库设计之“有时不得不违背的第三范式”

数据库设计之“有时不得不违背的第三范式” 在博客园上看到了一篇关于数据库范式的文章<数据库设计中的五个范式>:  第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性.我们为没有与表的主键关联的所有信息建立了一张新表.每张新表保存了来自源表的信息和它们所依赖的主键.    关于第三范式的思想,我想有很多朋友都熟悉,在数据库设计时,也是我们尽可能采用的范式之一,第三范式的出发点是什么?就是尽可能的减小“数据冗余”.并也能得到“数据”的整洁性,提高维护性,不容怀疑,第三范式是

逻辑数据库设计 - 单纯的树(递归关系数据)(转)

逻辑数据库设计 - 单纯的树(递归关系数据) 相信有过开发经验的朋友都曾碰到过这样一个需求.假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复. 这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系.这是一种典型的递归关系数据. 对于这个问题,以下给出几个解决方案,各位客观可斟酌后选择. 一.邻接表:依赖父节点 邻接表的方案如下(仅仅说明问题): CREATE TABLE Comments( CommentId int PK, ParentId int, --

ABP 初探 之User、Role、Permission数据库设计 (EntityFramework 继承的另一种使用方法)

最近群里(134710707)的朋友都在讨论ABP源码,我把最近学习的内容记录下来,同时也分享给大家,希望正在研究ABP源码的朋友有一定帮助. 上篇介绍ABP的多语言,本篇主要介绍权限的数据库设计,用EntityFramework已经有段时间了,基于ABP这样的设计还是第一次看到,具体应用场景1:N,ABP权限设计,菜单的权限可以分配置给角色,也可以直接分配给用户. 另一个应用场景也可以是订单系统:客户可以通过订单查询到客户的所有订单明细,订单明细与客户没有关系,如果想直接查看客户的订单明细,也

树形数据库设计

树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化.然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,因此是不能直接将Tree存入DBMS,设计合适的Schema及其对应的CRUD算法是实现关系型数据库中存储树形结构的关键. 理想中树形结构应该具备如下特征:数据存储冗余度小.直观性强:检索遍历过程简单高效:节点增删改查CRUD操作高效.无意中在

中小型商城系统中的分类/产品属性/扩展属性的数据库设计

声明:之所以定位在"中小型"商城系统,而非“大型”(指淘宝.拍拍这类巨无霸),理由很简单----我一直都呆在(创业型的)小公司,没见过这些大家伙是怎么设计的:) 正文: 之前发表过一篇"商城系统中[商品扩展属性]的表单生成及客户端验证",部分童鞋对于后台数据库的设计比较感兴趣,于是今天把这部分也补上. 一.产品分类设计越来越多的商城系统都热衷于选择“无限级分类”的设计,我也不例外,因为它方便扩展.这部分就不详细展开了,详见 无限级分类(非递归算法/存储过程版/GUI

数据库设计——评论回复功能

1.概述 评论功能已经成为APP和网站开发中的必备功能.本文主要介绍评论功能的数据库设计. 评论功能最主要的是发表评论和回复评论(删除功能在后台).评论功能的拓展功能体现有以下几方面: (1)单篇文章的评论数量和信息展示: (2)从时间维度,按照时间倒叙的方式展示动态的用户评论信息: (3)不同栏目,不同模块,不同时间维度的评论排行展示: (4)精华评论的单独推荐和聚合展示: (5)评论后直接分享到绑定的第三方平台: (6)点赞数.回复数等维度的排行等. 评论的后台管理: (1)删除: (2)推