Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как избавиться от интеллектуальных дублей?
 
 автор: Владимир55   (12.07.2012 в 10:59)   письмо автору
 
 

Информация выводится из базы следующим образом:

<?php

    
//Выполнение SQL-запроса
    
unset($result);
    
$result mysql_query($query);

    
//Обработка и вывод результатов SQL-запроса
    
unset($row);
    unset(
$t1);
    unset(
$t2);
    
$n 0;

    while (
$row mysql_fetch_array($resultMYSQL_ASSOC)){
        
$n++;
        
$t1 $row["CRITERIA_DES_TEXT"];
        
$t2 $row["CRITERIA_VALUE_TEXT"];

        
$t1 iconv('utf-8''cp1251'$t1);
        
$t2 iconv('utf-8''cp1251'$t2);

        echo 
"<br /> $n | t1 $t1 | t2 $t2";
    }


При этом оказывается, что имеют место смысловые повторы. Например, такие:

1 | t1 Напряжение [В] | t2 12
2 | t1 Номинальная мощность [Вт] | t2 55
3 | t1 Тип ламп | t2 H1
4 | t1 Напряжение [В] | t2 12
5 | t1 Номинальная мощность [Вт] | t2 55
6 | t1 Тип ламп | t2 H1
7 | t1 Напряжение [В] | t2 12
8 | t1 Номинальная мощность [Вт] | t2 55
9 | t1 Тип ламп | t2 H1
10 | t1 Напряжение [В] | t2 12
11 | t1 Номинальная мощность [Вт] | t2 55
12 | t1 Тип ламп | t2 H1


Очевидно, что здесь три смысловые строки (три пары t1 и t2), которые повторяются четыре раза.

В других случаях информация как таковая может содержать как одну строку, так и много строк, а повторов может быть больше или меньше.

Как избавиться от повторов, оставив только уникальную информацию?
(При этом не нарушив соответствие переменных t1 и t2)

  Ответить  
 
 автор: cheops   (12.07.2012 в 17:20)   письмо автору
 
   для: Владимир55   (12.07.2012 в 10:59)
 

Хм... вы хотите этого добиться средствами PHP, может добиться уникальности на уровне запроса?

  Ответить  
 
 автор: Владимир55   (12.07.2012 в 18:49)   письмо автору
 
   для: cheops   (12.07.2012 в 17:20)
 

Да, конечно, на уровне запроса такие проблемы решать правильнее.

Правда, их конструкция настолько сложна, что страшно прикасаться, но попробую...

  Ответить  
 
 автор: cheops   (12.07.2012 в 21:17)   письмо автору
 
   для: Владимир55   (12.07.2012 в 18:49)
 

Если запрос сформирован, то добиться уникальности уже не сложно. Он не сильно секретный? Можно его посмотреть?

  Ответить  
 
 автор: Владимир55   (12.07.2012 в 23:26)   письмо автору
 
   для: cheops   (12.07.2012 в 21:17)
 

Через РНР я сделал. Работает, но код мог бы быть и короче. А запрос вот какой:

        SELECT
            ART_ARTICLE_NR,
            SUP_BRAND,
            DES_TEXTS.TEX_TEXT AS ART_COMPLETE_DES_TEXT,
            DES_TEXTS2.TEX_TEXT AS ART_DES_TEXT,
            DES_TEXTS3.TEX_TEXT AS ART_STATUS_TEXT
        FROM
                       ARTICLES
            INNER JOIN DESIGNATIONS ON DESIGNATIONS.DES_ID = ART_COMPLETE_DES_ID
                                   AND DESIGNATIONS.DES_LNG_ID = @LNG_ID
            INNER JOIN DES_TEXTS ON DES_TEXTS.TEX_ID = DESIGNATIONS.DES_TEX_ID
             LEFT JOIN DESIGNATIONS AS DESIGNATIONS2 ON DESIGNATIONS2.DES_ID = ART_DES_ID
                                                    AND DESIGNATIONS2.DES_LNG_ID = @LNG_ID
             LEFT JOIN DES_TEXTS AS DES_TEXTS2 ON DES_TEXTS2.TEX_ID = DESIGNATIONS2.DES_TEX_ID
            INNER JOIN SUPPLIERS ON SUP_ID = ART_SUP_ID
            INNER JOIN ART_COUNTRY_SPECIFICS ON ACS_ART_ID = ART_ID
            INNER JOIN DESIGNATIONS AS DESIGNATIONS3 ON DESIGNATIONS3.DES_ID = ACS_KV_STATUS_DES_ID
                                                    AND DESIGNATIONS3.DES_LNG_ID = @LNG_ID
            INNER JOIN DES_TEXTS AS DES_TEXTS3 ON DES_TEXTS3.TEX_ID = DESIGNATIONS3.DES_TEX_ID
        WHERE
            ART_ID = @ART_ID


После исполнения получаем:
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
                $t1[] = $row["ART_ARTICLE_NR"];
                $t2[] = $row["SUP_BRAND"];
                $t3[] = $row["ART_COMPLETE_DES_TEXT"];
                $t4[] = $row["ART_DES_TEXT"];
                $t5[] = $row["ART_STATUS_TEXT"];
            }


Уникальность интересует относительно параметра ART_COMPLETE_DES_TEXT

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования