Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 mysql查询如何查找此记录_Php_Mysql - Fatal编程技术网

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。