在我们的数据库中,我们有一个表,它是三个表中每个排列的结果。
我试图编写一个PHP脚本,将所有这些表视为数组并检测是否存在缺失的排列。
e.g。
$foo = array('one', 'two', NULL)
$bar = array('three', 'four', NULL)
$baz = array('five', 'six', NULL)
$permutations = array(
array('one', 'three', 'five'),
array('two', 'three', 'five'),
array(NULL, 'three', 'five'),
//etc
)
foreach $foo as $x
foreach $bar as $y
foreach $baz as $z
$combo = array($x, $y, $z)
if $combo is not in $permutations
//generate sql to update db
我怎样才能做到这一点?
答案 0 :(得分:2)
您必须使用MySQL检索每个可能的排列并在第4个表上使用LEFT JOIN并测试是否没有匹配
如果你有3个表t1,t2,t3包含一列“value”,表t4是“排列”,其中包含三列t1,t2和t3,你可以得到不存在的“置换”以下查询
SELECT t1.value v1, t2.value v2, t3.value v3
FROM t1, t2, t3
LEFT JOIN t4 ON t4.t1=v1 AND t4.t2=v2 AND t4.t3=v3
WHERE t4.t1 IS NULL;
您可以调整此查询以匹配数据库架构。
答案 1 :(得分:0)
我完全不知道你试图做什么,但我建议:
$foo = array('one', 'two', NULL);
$bar = array('three', 'four', NULL);
$baz = array('five', 'six', NULL);
$permutations = array(
array('one', 'three', 'five'),
array('two', 'three', 'five'),
array(NULL, 'three', 'five'),
//etc
);
$foobarbaz = array_merge($foo, $bar, $baz);
foreach($foobarbaz as $k){
if(!in_array($k, $permutations) {
$sql_trigger_start();
}
}
遇到此问题的一个例子。 http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/