Как сделать цикл внутри цикла с PHP в MySQL? - PullRequest
0 голосов
/ 02 февраля 2011

стол persons

name  |   details
------------------
mathew| tax,home,car,insurance
john  | job,tax,employ
neil  | tax,home,car,job
yancy | consultant,rent,family
lucy  | home,car,insurance

Я хочу просмотреть эту таблицу и выполнить поиск по деталям, а затем сохранить результат в другой таблице с именем persons1

name  |   names
------------------
mathew| neil,lucy,john
neil  | mathew,lucy,john
john  | mathew,lucy,neil

пока что я кодировал что-то вроде ниже, но не работает

mysql_connect("localhost", "root", "pass"); 
mysql_select_db("database");
$query = "SELECT * FROM persons"; 
$result  = mysql_query($query); 
while($r = mysql_fetch_array($result)) 
{ 
    $exp = explode(",",$r["details"]);
    $sql = mysql_query('SELECT * FROM persons WHERE MATCH (tags) AGAINST ("+$exp[0]" "+$exp[1]" "+$exp[2]" IN BOOLEAN MODE)'); 
    $result = array(); 
    while($row = mysql_fetch_assoc($sql))
    {   
        array_push($result,$row['name']);
        $name = implode(",",$result);   
        mysql_query("INSERT INTO person_new (name,names) VALUES (\"".$r["name"]."\", \"".$name."\")");
    } 
}

Очень печально, что никто не может ответить на мой вопрос о моем коде. вместо того, чтобы изучать мой дизайн, я прошу вас взглянуть на мой код и сказать, где я допустил ошибку ... я делаю что-то отличное от того, что он видит, и поэтому я прошу вас проверить мой код ...

Ответы [ 2 ]

5 голосов
/ 02 февраля 2011

Ваша проблема будет лучше решена с помощью нормализации базы данных .

Хранение данных типа tax,home,car,insurance в одном столбце с последующим анализом для поиска - очень плохая идея.

0 голосов
/ 02 февраля 2011

Прежде всего, было бы хорошо, если бы вы сказали нам , что не работает.

Сказав это, я подозреваю (хотя бы одну) вашу ошибку (и) здесь:

'SELECT * FROM persons WHERE MATCH (tags) AGAINST ("+$exp[0]" "+$exp[1]" "+$exp[2]" IN BOOLEAN MODE)'
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Это буквально даст вам запрос AGAINST ("+$exp[0]" "+$exp[1]" "+$exp[2]" IN BOOLEAN MODE), что, скорее всего, не то, что вы хотите. Вам необходимо объединить строку или использовать строку в двойных кавычках:

'SELECT ... AGAINST ("+' . $exp[0] . '" "+' . $exp[1] . '" "+' . $exp[2] . '" IN BOOLEAN MODE)'

или

"SELECT ... AGAINST (\"+$exp[0]\" \"+$exp[1]\" \"+$exp[2]\" IN BOOLEAN MODE)"

Я с @Dolph, хотя, это не очень хорошая структура базы данных, и если вы все равно собираетесь изменить ее позже (осторожно, говоря «позже», чего обычно не бывает), вам следует просто сделать это сейчас .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...