PHP MySQL从3个表中选择
我需要从三个表中选择数据 在php中,这仅仅意味着检查PHP MySQL从3个表中选择,mysql,sql,Mysql,Sql,我需要从三个表中选择数据 在php中,这仅仅意味着检查people中的所有ID,然后在其余的表中循环查找数据。一个SQL查询是否可以实现这一点 这就是我所尝试的: SELECT name, age, message, notes FROM people INNER JOIN messages ON people.id = messages.id INNER JOIN notes ON people.id = notes.id WHERE replied = 'y' 通过columnId或na
people
中的所有ID,然后在其余的表中循环查找数据。一个SQL查询是否可以实现这一点
这就是我所尝试的:
SELECT name, age, message, notes
FROM people
INNER JOIN messages ON people.id = messages.id
INNER JOIN notes ON people.id = notes.id
WHERE replied = 'y'
通过columnId或name检查列名和表关系。 在这种情况下,您有名称,但名称不能与messages.id或note.id兼容,因此为表人物添加列id或为表消息和注释添加列名称 例如:
SELECT _id_ , name, age, message, notes
FROM people
INNER JOIN messages ON people.id = _messages.peopleId_
INNER JOIN notes ON people.id = _notes.peopleId_
WHERE replied = 'y'
再见^。^通过columnId或name检查列名和表关系。 在这种情况下,您有名称,但名称不能与messages.id或note.id兼容,因此为表人物添加列id或为表消息和注释添加列名称 例如:
SELECT _id_ , name, age, message, notes
FROM people
INNER JOIN messages ON people.id = _messages.peopleId_
INNER JOIN notes ON people.id = _notes.peopleId_
WHERE replied = 'y'
再见。^我认为您的数据结构有问题。首先,每个表都应该有自己的ID列(主键-了解一下) 第二件事是,对于您的数据结构,如果您有两个以上的用户,那么谁发送消息,谁接收消息都会有问题。您在消息表中有“回复”列(y/n),但此表结构无法将一条消息与您(或某人)回复的消息连接起来。 此外,不需要表注释(我不需要表注释函数),这种数据结构中的表没有太多意义,您只需在表消息中添加一个名为notes的列,这将为您完成工作 以下是一个简单的示例,说明了数据的外观: 表:人
+---------+----------+------------+
|peopleID | Name | Age |
+---------+----------+------------+
| 123qwe | Tom | 23 |
+---------+----------+------------+
| 456rty | Andy | 35 |
+---------+----------+------------+
表:信息
+---------+----------+------------+-------------------------+------------+
|messageID| peopleID | messages | note | replied |
+---------+----------+------------+-------------------------+------------+
| 1 | 123qwe | Hi | I have problem with this| 0 |
+---------+----------+------------+-------------------------+------------+
| 3 | 123qwe | Hello | oh no | 0 |
+---------+----------+------------+-------------------------+------------+
| 4 | 456rty | Hi | yeah | 3 |
+---------+----------+------------+-------------------------+------------+
| 5 | 123qwe | hi | boring | 4 |
+---------+----------+------------+-------------------------+------------+
| 7 | 456rty | pfff | what's new | 0 |
+---------+----------+------------+-------------------------+------------+
| 9 | 123qwe | Hi | nothing, I'm bored | 7 |
+---------+----------+------------+-------------------------+------------+
| 10 | 456rty | pf | me to | 9 |
+---------+----------+------------+-------------------------+------------+
因此,在这里,您将在messageID的列中使用y/n值,而不是在responsed列中使用y/n值,在该列上是该列的答案。此外,如果该列中的值为0,则表示这是对话中的第一条消息
您的查询可用于选择已回答的消息,如下所示
-- SELECT MESSAGE WHICH HAVE BEEN ANSWERED
SELECT m.messageID, p.name, p.age, m.messages, m.note
FROM people p
INNER JOIN message m
ON p.peopleID = m.peopleID
WHERE m.messageID IN (SELECT replied
FROM message
GROUP BY replied);
-- SELECT MESSAGE WHICH NOT HAVE BEEN ANSWERED
SELECT m.messageID, p.name, p.age, m.messages, m.note
FROM people p
INNER JOIN message m
ON p.peopleID = m.peopleID
WHERE m.messageID NOT IN (SELECT replied
FROM message
GROUP BY replied);
所以你可以看到它是如何工作的
这项工作是这样的,若你们想看到你们得到答案的消息,而不是简单地检查回复列中是否有messageID,回复列中是否有messageID,这意味着消息得到了答案,若并没有,这意味着消息并没有得到答案
希望这不会让你很困惑
德国劳埃德船级社
另外,如果您出于某种原因需要第三个表注释,您可以简单地将其添加到查询中,再添加一个内部联接,就像您在查询中所做的那样 我认为您的数据结构有问题。首先,每个表都应该有自己的ID列(主键-了解一下) 第二件事是,对于您的数据结构,如果您有两个以上的用户,那么谁发送消息,谁接收消息都会有问题。您在消息表中有“回复”列(y/n),但此表结构无法将一条消息与您(或某人)回复的消息连接起来。 此外,不需要表注释(我不需要表注释函数),这种数据结构中的表没有太多意义,您只需在表消息中添加一个名为notes的列,这将为您完成工作 以下是一个简单的示例,说明了数据的外观: 表:人
+---------+----------+------------+
|peopleID | Name | Age |
+---------+----------+------------+
| 123qwe | Tom | 23 |
+---------+----------+------------+
| 456rty | Andy | 35 |
+---------+----------+------------+
表:信息
+---------+----------+------------+-------------------------+------------+
|messageID| peopleID | messages | note | replied |
+---------+----------+------------+-------------------------+------------+
| 1 | 123qwe | Hi | I have problem with this| 0 |
+---------+----------+------------+-------------------------+------------+
| 3 | 123qwe | Hello | oh no | 0 |
+---------+----------+------------+-------------------------+------------+
| 4 | 456rty | Hi | yeah | 3 |
+---------+----------+------------+-------------------------+------------+
| 5 | 123qwe | hi | boring | 4 |
+---------+----------+------------+-------------------------+------------+
| 7 | 456rty | pfff | what's new | 0 |
+---------+----------+------------+-------------------------+------------+
| 9 | 123qwe | Hi | nothing, I'm bored | 7 |
+---------+----------+------------+-------------------------+------------+
| 10 | 456rty | pf | me to | 9 |
+---------+----------+------------+-------------------------+------------+
因此,在这里,您将在messageID的列中使用y/n值,而不是在responsed列中使用y/n值,在该列上是该列的答案。此外,如果该列中的值为0,则表示这是对话中的第一条消息
您的查询可用于选择已回答的消息,如下所示
-- SELECT MESSAGE WHICH HAVE BEEN ANSWERED
SELECT m.messageID, p.name, p.age, m.messages, m.note
FROM people p
INNER JOIN message m
ON p.peopleID = m.peopleID
WHERE m.messageID IN (SELECT replied
FROM message
GROUP BY replied);
-- SELECT MESSAGE WHICH NOT HAVE BEEN ANSWERED
SELECT m.messageID, p.name, p.age, m.messages, m.note
FROM people p
INNER JOIN message m
ON p.peopleID = m.peopleID
WHERE m.messageID NOT IN (SELECT replied
FROM message
GROUP BY replied);
所以你可以看到它是如何工作的
这项工作是这样的,若你们想看到你们得到答案的消息,而不是简单地检查回复列中是否有messageID,回复列中是否有messageID,这意味着消息得到了答案,若并没有,这意味着消息并没有得到答案
希望这不会让你很困惑
德国劳埃德船级社
另外,如果您出于某种原因需要第三个表注释,您可以简单地将其添加到查询中,再添加一个内部联接,就像您在查询中所做的那样 请包括您的表格结构,特别是这些表格之间的关系。您在
people.id
上同时加入messages.id
和notes.id
很可能是不正确的。对不起,我是DB初学者。我在学习,那里没有任何关系。如果你的桌子之间没有任何关系,那么你要求做的事情是不可能的。您需要在messages表中添加一些与人相关的列(例如:PeopleId),并在加入(例如:加入关于人的消息。id=messages.PeopleId
)中使用该字段。notes表的情况也一样。您需要定义一个关系,以便连接
表。在php中如何循环使用它来提取数据?当您从People表中提取ID时,该ID如何用于从messages和notes表中提取数据?也许您应该尝试LEFT JOIN
而不是JOIN
?(将respond='y'
移动到ON
子句以获得正确的左连接行为。)请包括您的表结构,特别是这些表之间的关系。您在people.id
上同时加入messages.id
和notes.id
很可能是不正确的。对不起,我是DB初学者。我在学习,那里没有任何关系。如果你的桌子之间没有任何关系,那么你要求做的事情是不可能的。您需要在messages表中添加一些与人相关的列(例如:PeopleId),并在加入
中使用该字段(例如:加入关于人的消息。id=messages.PeopleId