SQL:根据related_id和related_table选择。 ID存储在以table命名的数组中

时间:2012-10-13 22:18:24

标签: php mysql sql select

我有一个名为活动的表,看起来像这样


id | related_id | related_table | ...

3个数组,每个数组以表格命名,包含ID:

$clubs[1,2,3]; $vendors[4,5,6]; $users[7,8,9];

如何选择属于阵列中相应分会,供应商和用户的活动?我只知道非常简单的SQL,但我确信有办法做到这一点。

如果可能的话,我希望在1个选择语句中执行此操作。否则我知道如何在3中做“在哪里”。

解答:

以下是我完成所有活动的选择:

'SELECT * from activities where (related_table = \'clubs\' and related_id in ('.$clubs_string.')) or  (related_table = \'vendors\' and related_id in ('.$vendors_string.')) or (related_table = \'users\' and related_id in ('.$users_string.'));';

参见Morgan Wilde关于implode()的回答 - 将数组转换为字符串。

1 个答案:

答案 0 :(得分:1)

如果我的问题正确,那么找到与阵列中保存的俱乐部ID相关的所有活动的方式应该是......

$clubs_string = implode(",", $clubs); // convert your array into a comma separated string

一旦你对它进行了排序,就发送一个像

这样的查询
SELECT `id` FROM `activities` WHERE `related_id` IN ({$clubs_string}) AND `related_table` = 'club_table_name'

您可以为您拥有的所有其他表类型重复相同的逻辑。

在这里你可以找到一些整洁的MySQL WHERE IN例子 - http://www.tutorialspoint.com/mysql/mysql-in-clause.htm

希望有所帮助!