使用PDO根据mySQL中其他两个表的结果从表中选择行

s

我在3个表中构建了数据库:

members       -       membersitems       -     items
---------------------------------------------------------
memberid      -       memberitemid       -     itemid
username      -       itemid             -     itemname
password      -       memberid           -     itemtype
etc

这个想法是,每次成员获得新项目时,都会向其中添加一行membersitemsmembersitems表旨在将两个表连接在一起。我不确定是否只有两个表和JOIN有更简单的方法

使用“$_SESSION["memberid"]我在membersitems表中选择成员标识与会话相同的行”:

$stmt = $db->prepare('SELECT itemid FROM membersitems WHERE memberid = :memberid');
$stmt->execute(array(':memberid' => $_SESSION['memberID']));
$array = $stmt -> fetchAll(PDO::FETCH_ASSOC);
    foreach($array as $row) {
    $itemid[] = $row['itemid'];
}

我不确定下一步如何整理此数据的最佳方法,但是我尝试使用逗号分隔的字符串:

$itemids = '[' .implode(',', $itemid). ']';
/// echos out: [1,2,3,4,5,6,6,6,]

请注意,第6项有3个。我想显示3个第6项。

然后,我尝试使用以下代码在项目表中选择数据,该代码不起作用,但未返回错误:

    $arr = $itemids;     
    $in  = str_repeat('?,', count($arr) - 1) . '?';
    $sql = "SELECT * FROM items WHERE itemid IN ($in)";
    $stm = $db->prepare($sql);
    $stm->execute($arr);
    $data = $stm->fetchAll();

我还希望获得一些有关分离返回的数据以及可能按类型排序的建议。

我对服务器端脚本和mySQL还是很陌生,但是可以处理批评。请尽可能严格,但请假设我的知识是基础。可接受的答案将是正在教授的答案,而不仅仅是解决方案。

我知道也有类似的问题,我尝试过其他与这个概念相似的示例,但努力填补存在细微差别的空白。

先感谢您。

内特·沃恩(Nate Vaughan)

正如某些注释中所暗示的那样,这是一个非常简单的SQL概念,称为JOIN。

您正在使用WHERE IN,它在JOIN家族的近亲中叫做INNER JOIN。

您需要阅读一些有关JOIN的文档,但足以说明INNER JOIN可用于过滤另一个表中的一个表。例如,如果要从连接表中的membersid过滤的项目表中获取项目,则可以使用如下查询进行操作:

SELECT i.* 
FROM items i
INNER JOIN membersitems m
ON i.itemid = m.memberid
WHERE m.memberid = :memberid

在大多数情况下,与执行两次查询相比,这是一种获取与给定memberid关联的项目的更有效的方法(如注释中所述,最好避免在PHP中对逗号进行序列化的ID,然后再进行查询)。

附带说明一下,子查询将是使用与当前查询类似的语法来实现您的目标的另一种方式:

SELECT * 
FROM items 
WHERE itemid 
IN (
  SELECT itemid 
  FROM membersitems 
  WHERE memberid = :memberid
)

还有一张便条。您的表架构可能是多余的,具体取决于您在成员和项目之间的关系类型。您将需要阅读一对多与多对多的架构设计。如果可能的话,您拥有的设计就是一个好的设计:1)一个成员拥有多个项目并且2)一个项目拥有多个成员但是,如果项目表中的每个项目都与一个成员相关联并且只有一个成员(我怀疑可能是这种情况),您可以使用如下所示的模式:

members       -     items
------------------------------
memberid      -     itemid
username      -     memberid
password      -     itemname
etc

在上面的模式中,每个项目都负责了解其父成员,这足以执行以上两个查询(只需替换适当的表名)。

最后的笔记。这绝不是id必需的,但是对于表来说,仅具有被称为(而不是itemsid,membersid)的id列是很普遍的在联接表(例如items_idmembers_id中用下划线分隔单词是相当常见的sql约定

玩得开心,祝你好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySql通过其他元素从两个不同的表中选择id然后id

来自分类Dev

MYSQL:如何根据其他两个表的条件在表中插入行

来自分类Dev

在 MySQL 中,如何从两个不同的表中选择 *?

来自分类Dev

如何使用mysql中的连接从一个表中选择一行并从其他表中选择多行,

来自分类Dev

运行查询,根据第一个表中的数据从一个表和两个其他可能的表中选择一个数据

来自分类Dev

MySQL / PDO-从其他表中选择(Join语句)

来自分类Dev

从两个不同的表中选择行,但使用php和MySQL按日期排序

来自分类Dev

根据其他两个表更新表

来自分类Dev

MySQL从两个表匹配的多个表中选择

来自分类Dev

mysql:通过查找表从两个表中选择

来自分类Dev

连接两个表并从结果中选择

来自分类Dev

MySQL如何从两个表中选择数据,以便第二个表中的行覆盖第一个表中的行?

来自分类Dev

MySQL选择表取决于其他两个表

来自分类Dev

从2个表中选择两个匹配的行

来自分类Dev

使用mysql从两个不同的表中获取结果

来自分类Dev

使用mysql从两个不同的表中获取结果

来自分类Dev

从两个表中可能不存在数据的两个mysql表中选择数据

来自分类Dev

MySQL Best从两个表中选择查询

来自分类Dev

从Mysql服务器中选择两个表

来自分类Dev

Mysql从两个表中选择join

来自分类Dev

从两个表中选择所有行

来自分类Dev

根据两个MySQL表计算时间戳/其他数据

来自分类Dev

根据两个MySQL表计算时间戳/其他数据

来自分类Dev

如何从两个MySQL表中选择不匹配的行

来自分类Dev

如何从php中的两个表中选择数据

来自分类Dev

从SQL中的两个表中选择

来自分类Dev

使用SQL查询从两个表中选择数据

来自分类Dev

使用greendao从两个表中选择多个列

来自分类Dev

使用SQL查询从两个表中选择数据

Related 相关文章

  1. 1

    MySql通过其他元素从两个不同的表中选择id然后id

  2. 2

    MYSQL:如何根据其他两个表的条件在表中插入行

  3. 3

    在 MySQL 中,如何从两个不同的表中选择 *?

  4. 4

    如何使用mysql中的连接从一个表中选择一行并从其他表中选择多行,

  5. 5

    运行查询,根据第一个表中的数据从一个表和两个其他可能的表中选择一个数据

  6. 6

    MySQL / PDO-从其他表中选择(Join语句)

  7. 7

    从两个不同的表中选择行,但使用php和MySQL按日期排序

  8. 8

    根据其他两个表更新表

  9. 9

    MySQL从两个表匹配的多个表中选择

  10. 10

    mysql:通过查找表从两个表中选择

  11. 11

    连接两个表并从结果中选择

  12. 12

    MySQL如何从两个表中选择数据,以便第二个表中的行覆盖第一个表中的行?

  13. 13

    MySQL选择表取决于其他两个表

  14. 14

    从2个表中选择两个匹配的行

  15. 15

    使用mysql从两个不同的表中获取结果

  16. 16

    使用mysql从两个不同的表中获取结果

  17. 17

    从两个表中可能不存在数据的两个mysql表中选择数据

  18. 18

    MySQL Best从两个表中选择查询

  19. 19

    从Mysql服务器中选择两个表

  20. 20

    Mysql从两个表中选择join

  21. 21

    从两个表中选择所有行

  22. 22

    根据两个MySQL表计算时间戳/其他数据

  23. 23

    根据两个MySQL表计算时间戳/其他数据

  24. 24

    如何从两个MySQL表中选择不匹配的行

  25. 25

    如何从php中的两个表中选择数据

  26. 26

    从SQL中的两个表中选择

  27. 27

    使用SQL查询从两个表中选择数据

  28. 28

    使用greendao从两个表中选择多个列

  29. 29

    使用SQL查询从两个表中选择数据

热门标签

归档