一种查询或快速执行sql语句的方法


One query or quick way to execute sql statement

我有一个标签表,看起来像这样:

TABLE: hashtags
hashtag_id      hashtag_name - UNIQUE
1                 apples
2                 oranges
3                 life

和一个有这些标签的主题表,如:

TABLE: topic_hashtags, unique index on hashtag_id and topic_id
topic_hashtag_id     hashtag_id    topic_id   
1                       1             2          
2                       3             18
3                       3             30
4                       2             15

我一直在尝试制作一个MYSQL语句(没有成功),可以在伪代码中执行以下操作:

INSERT INTO topic_hashtags (hashtag_id, topic_id) 
VALUES(SELECT LAST_INSERT_ID(INSERT INTO hashtags (hashtag_name) VALUES('somehashtag') 
ON DUPLICATE KEY SELECT hashtag_id FROM hashtags WHERE hashtag_name = 'somehashtag'), 'x');

基本上我需要获得标签名称的ID,如果它不存在,然后插入它并获得最后插入的ID,然后使用这些值将其记录到hashtag_topics表中。问题是,ON DUPLICATE KEY不允许您选择列。是否有其他方法我可以做到这一点,或者它只是更快地使用多个查询?(但我觉得不是这样)。我真的不想做:

SELECT id from hashtags
if mysqli_num_rows($result) == 1):
use the id and insert
endif;
else
insert
mysqli_insert_id
use that id and insert

您不能在一个查询中完成所有这些。只需使用多个查询。它不会造成过多的负载,因为现代数据库和文件系统在缓存方面非常出色。