1. PHP / Говнокод #13031

    +150

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    function deleteDublicateItems(){
        $q = '
        select COUNT(*), id, vk_id
        from `items`
        group by `vk_id`
        having COUNT(*) > 1';
        $sql = mysql_query($q);
        
        if (mysql_num_rows($sql)){	
    	while($row = mysql_fetch_assoc($sql)){
    	    $sql2 = mysql_query('select * from `items` where `vk_id` = "'.$row['vk_id'].'" and `id` != "'.$row['id'].'"');
    	    
    	    if (mysql_num_rows($sql2)) {
    		while($row2 = mysql_fetch_assoc($sql2)) {
    		    $sql3 = mysql_query('select * from `images` where `item_id` = "'.$row2['id'].'"');
    		    
    		    if (mysql_num_rows($sql3)) {
    			while ($row3 = mysql_fetch_assoc($sql3)) {
    			    @unlink( ROOT . DS . 'uploads' . DS . 'images' . DS . $row3['name'] . '.' . $row3['ext']);
    			    mysql_query('delete from `images` where `id` = "'.$row3['id'].'"');
    			}
    		    }		    
    		    mysql_query('delete from `items` where `id` = "'.$row2['id'].'"');
    		}
    	    }
    	}
        }
    }

    удаление дубликатов

    Запостил: Serious_Andy, 22 Мая 2013

    Комментарии (7) RSS

    • Communication-Engaging Algorithms (Наверное, чтобы Обаме насолить)
      Ответить
    • Превентивные методы рулят - use unique constraints :)
      Ответить
    • @unlink( ROOT . DS . 'uploads' . DS . 'images' . DS . $row3['name'] . '.' . $row3['ext']);


      не понимаю, неужели DIRECTORY_SEPARATOR так важен для файловых функций? Вроде же и так должно работать на всех платформах:
      @unlink( ROOT .  '/uploads/images/' . $row3['name'] . '.' . $row3['ext']);


      Или я не прав?
      Ответить
      • Должно ;) "/" не работает только в командных строках виндовых прог - но это проблема их парсера, не операционки. А так, че в винде, че в никсоподобных, ядра и апишки вполне жрут /. Причем в большинстве случаев даже и /////// будет понят как один /.
        Ответить
      • Ну использование DS сферически-вакуумно надежнее, как поведут себя эти функции в случае не тех DS в пути файла в документации не описано, а полагаться на недокументированные особенности не комильфо, но это мое имхо. Довольно часто встречается код, в котором на это не заморачиваются, особенно в небольших скриптах.
        Ответить
      • У меня был случай когда какая-то файловая операция не работала при запуске на Windows-сервере (не из консоли). Сейчас уже не помню, но кажется там причина была в том, что откуда-то возвращался путь до файла, который потом резался, и для разрезания использовался "/" вместо DS, а в строке использовался как раз виндовый разделитель. Но я не помню точно, возможно проблема была в другом. Во всяком случае точно помню, что фикс заключался как раз в использовании DS.
        Ответить
    • Джойны для неудачников.
      Ответить

    Добавить комментарий