Php mysql查询如何查找此记录
我的桌子结构Php mysql查询如何查找此记录,php,mysql,Php,Mysql,我的桌子结构 id event_id tag_id 1 18 2 2 18 3 3 18 10 4 18 14 5 18 175 从事件表中选择*,其中tag_id=176,tag_id位于(2,3,10) 我需要有175条记录的记录和数组中的任何记录()使用子查询…并获得所需的结果 SELECT e.* FROM (SELECT *
id event_id tag_id
1 18 2
2 18 3
3 18 10
4 18 14
5 18 175
从事件表中选择*,其中tag_id=176,tag_id位于(2,3,10)
我需要有175条记录的记录和数组中的任何记录()使用子查询…并获得所需的结果
SELECT e.*
FROM
(SELECT *
FROM event_table
WHERE tag_id = 175
) AS e
JOIN
(SELECT *
FROM event_table
WHERE tag_id IN(2,3,4)
) AS e1
ON e1.event_id = e.event_id;
希望这将有助于……认为您需要:
SELECT * FROM event_table WHERE (tag_id = 175 OR tag_id IN(2,3,10))
使用
或
查找tag_id=175或tag id是数组项之一的行。使用内爆构造逗号分隔的ID列表:
$id = 175;
$tagIds = array(2,3,10);
$sql = "$sql = SELECT * from event_table where tag_id = " . (int) $id . " or tag_id IN(" . implode(',', $tagIds) . ")";
请注意,您必须验证$id
和$tagIds
中只存储整数,因为使用用户输入可能会引入sql注入
强烈建议使用
mysqli*()
函数和准备好的语句。以下是一些需要考虑的问题:
SELECT event_id
, MAX(tag_id = 175)
, MAX(tag_id IN(2,3,10))
FROM event_table
GROUP
BY event_id;
那么,你就可以做一些像
SELECT event_id
FROM event_table
GROUP
BY event_id
HAVING MAX(tag_id = 175)
AND MAX(tag_id IN(2,3,10));
…或是细微的变化。例如,如果您希望事件具有175个标记,并且三个标记(2,3,10)中至少有两个标记,则可能是:
SELECT event_id
FROM event_table
GROUP
BY event_id
HAVING SUM(tag_id = 175) >= 1
AND SUM(tag_id IN(2,3,10)) >= 2;
不是100%确定您想要回什么,但是假设您想要从events表中获取标记为2、3或10的所有详细信息,对于标记为175的事件,那么我可能会进行连接,表的一个匹配项为tag_id 175,然后在WHERE子句中检查表的另一个匹配项上的另一个标记
SELECT a.id, a.event_id, a.tag_id
FROM event_table a
INNER JOIN event_table b
ON a.event_id = b.event_id
AND b.tag_id = 175
WHERE a.tag_id IN (2,3,10)
使用
或
代替和
问题不清楚。。。“我需要有175条记录的记录和数组中的任何记录()”?如果我正在使用或它显示错误的结果,您所说的任何…tag_id 176必须且仅来自数组或其他的一条是什么意思。请澄清您的问题..您到底想要什么…我有2个事件第一个事件包含tag_id=1,2,3,4,175第二个事件包含tag_id=1,2,3,5,7176如果我使用您的查询,则第二条记录也会出现。。。但第二条记录没有175个标记id。