2013-01-26 2 views
0

Я смотрю на это часами. Я не могу найти ошибку. Может ли кто-нибудь сказать мне, что я сделал неправильно? Или есть лучший способ сравнить?сравнение между массивами двух таблиц

$res1=mysql_query(**query for table1**); 
$n1=mysql_num_rows($res1); 
$res2=mysql_query(**query for table 2**); 
$n2=mysql_num_rows($res2); 

for($i=0;$i<$n1;$i++) 
{ 
    $r1=mysql_fetch_row($res1); 

    for($j=0;$j<$n2;$j++) 
    { 
     $r2=mysql_fetch_row($res2); 
     if($r1[0]==$r2[0]) 
     { 
      echo $r1[0]."<br>"; 
     } 
    } 
} 

таблица 1 содержит следующие элементы: 1,2,3,16,18,19,20,21,22,24,23 таблица 2 содержит: 23,21

Однако программа возвращает нулевые совпадения. Зачем?

+0

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html –

ответ

1

Так что здесь происходят

  1. вы зацикливание на все Hte элементов результата 1 правильно, но вы повторно не цикл по всем элементам результата два правильно.

Результат: два элемента истощаются на первой итерации.

из примера данных, которые вы в курсе, вот зациклившейся:

когда r1 = 1,

г2 23,21

когда r1 = 2,

г2 истощены.

Для сброса результата два снова, вам придется сделать

mysql_data_seek ($ res2,0); каждый раз

ваш т.е. цикл будет выглядеть следующим образом

for($i=0;$i<$n1;$i++) { 

    $r1=mysql_fetch_row($res1); 

    mysql_data_seek($res2,0); 
    for($j=0;$j<$n2;$j++)  { 
     $r2=mysql_fetch_row($res2); 
     if($r1[0]==$r2[0])   { 
      echo $r1[0]."<br>"; 
     } 
    } 
} 
0

Позвольте базе данных выполнить объединение в одном запросе. Для этого они созданы, и они обычно используют более эффективные алгоритмы, например, если индекс доступен.

0

Это звучит как то, что вы хотите, это INNER JOIN. A JOIN является фундаментальным компонентом реляционной базы данных, которая позволяет различным образом передавать данные из нескольких таблиц.

Мое любимое объяснение JOIN s на самом деле от Bugzilla documentation - они отлично справляются с объяснением всех разных типов.

В вашем случае, ваш запрос будет выглядеть следующим образом:

SELECT 
    table1.field1, table1.field2, ..., 
    table2.field2, table2.field2, ... 
FROM table1 
INNER JOIN table2 ON (table1.id = table2.id) 

Я создал SQL Fiddle для вашего сведения.

Смежные вопросы