Задать вопрос
Ответы пользователя по тегу MySQL
  • Как правильнее записывать данные в 2 связанных таблицах?

    Bowen
    @Bowen Автор вопроса
    Японский бог
    Проблему решил таким образом:
    $tags = $db->safesql( htmlspecialchars( strip_tags( stripslashes( trim( $_POST['tags'] ) ) ), ENT_COMPAT, $config['charset'] ) );
    $tags = array_filter(array_map('trim', explode(',', $tags)));
    $tags_box = array();
    
    $all_post_tags = $db->super_query("SELECT tags.*, post_tags.* FROM " . PREFIX . "_tags tags LEFT JOIN " . PREFIX . "_post_tags post_tags ON (tags.id=post_tags.tag) WHERE post_tags.post_id=$post_id", true);
    
    foreach($all_post_tags as $tag){
    
    	$tags_box["all_post_tags"][] = $tag["title"];
    	$tags_box["all"][$tag["title"]] = $tag["tag"];
    
    	if (!in_array($tag["title"], $tags)){
    		$tags_box["remove"][] = $tag["id"];
    	}
    
    	$tag["posi"]--;
    	$tags_box["upd_posi"] = ($tags[$tag["posi"]] == $tag["title"]) ? 0 : 1;
    	$tag["posi"]++;
    	$tags_box["upd_posi_indexes"][$tag["title"]] = $tag["posi"];
    	$tags_box["upd_posi_id"][] = $tag["id"];
    
    }
    $tag_id = 0;
    foreach($tags as $tag_posi => $tag_title){
    
    	$tag_posi++;
    	$tag_id++;
    
    	if (!in_array($tag_title, $tags_box["all_post_tags"])){
    
    		$tags_box["insert_new_tags_title"][] = "('$tag_title')";
    		$tags_box["insert_new_tags_id"][] = $tag_title;
    		$tags_box["post_tags"][] = "('$post_id', '{$tag_id}', '$tag_posi')";
    		
    	}
    	$tags_box["positions"][$tag_title] = $tag_posi;
    	if (isset($tags_box["upd_posi_indexes"][$tag_title])){	
    		$tags_box["upd_posi_new"][] = $tags_box["upd_posi_indexes"][$tag_title];
    	}
    }
    if (!empty($tags_box["remove"])){
    	$db->query("DELETE FROM " . PREFIX . "_post_tags WHERE post_id='$post_id' AND tag REGEXP '[[:<:]]".implode('|', $tags_box["remove"])."[[:>:]]'");
    } 
    if (!empty($tags_box["insert_new_tags_title"])){
    
    	$finded_tags = $db->super_query("SELECT * FROM " . PREFIX . "_tags WHERE title REGEXP '[[:<:]]" . implode('|', $tags_box["insert_new_tags_id"]) . "[[:>:]]'", true);
    
    	foreach($finded_tags as $tag){
    
    		if (in_array($tag["title"], $tags) && $tags_box["all"][$tag["title"]] != $tag["title"]){
    			$tags_box["finded"][] = "('$post_id', '{$tag["id"]}', '{$tags_box["positions"][$tag["title"]]}')";
    		}
    
    	}
    	if (!empty($tags_box["finded"])){
    		$db->query("INSERT INTO " . PREFIX . "_post_tags (post_id, tag, posi) VALUES " . implode(",", $tags_box["finded"]) . "");
    	}
    	else {		
    		$db->query("INSERT INTO " . PREFIX . "_tags (title) VALUES " . implode(",", $tags_box["insert_new_tags_title"]) . "");
    		$db->query("INSERT INTO " . PREFIX . "_post_tags (post_id, tag, posi) VALUES " . implode(",", $tags_box["post_tags"]) . " ");
    	}
    }
    if ($tags_box["upd_posi"]){
    	$db->query("UPDATE " . PREFIX . "_post_tags SET posi = ELT(field(tag, ".implode(',', $tags_box["upd_posi_id"])."), ".implode(",", $tags_box["upd_posi_new"]).") WHERE tag REGEXP '[[:<:]]".implode('|', $tags_box["upd_posi_id"])."[[:>:]]' AND post_id=$post_id");
    }

    Буду признателен если кто-нибудь сообщит какую-нибудь альтернативу!
    Ответ написан
    Комментировать
  • Почему не срабатывает MySQL запрос Select?

    Bowen
    @Bowen
    Японский бог
    Если это DLE, то такой запрос
    $fotos = $db->super_query( "SELECT images FROM " . PREFIX . "_images WHERE news_id='120'", true );
    должен вернуть готовый массив.
    Ответ написан
    5 комментариев
  • Как правильно сконструировать форму добавления записей в базу?

    Bowen
    @Bowen Автор вопроса
    Японский бог
    Посидел, подумал и пришел к выводу:
    1. Запретить вставку данных в поле, не хочу. Я пытаюсь в первую очередь для других делать а потом для себя.
    2. Проверять данные из поля с теми из базы тоже не вариант, так как без доп. ajax запросов не обойтись.
    3. Делать запрос в php и уже там же и проверять полученные данные из формы с теми из базы. Если значения совпадают, записывать id в другую таблицу если нет, соответственно новую запись записать в основную таблицу. Это единственный способ который должен работать по моему мнению.

    P.S. Я все еще верю что есть другие способы по легче. Надеюсь что кто-нибудь поделиться :)
    Ответ написан
    Комментировать
  • Как правильно настроить плагин Select2 для вывода данных из базы данных MySQL?

    Bowen
    @Bowen Автор вопроса
    Японский бог
    Проблему решил поменяв версию плагина 4.0.0 на 3.3.2

    P.S. Вот сам код(если кому интересно будет)
    $(document).ready(function(){
    	$('#Organisation').select2({
    		multiple: false, // true - Дает возможность мультивыбора 
    		ajax: {
    			url: '/engine/ajax/xfields.php',
    			type: 'GET',
    			dataType: 'json',
    			quietMillis: 100,
    			results: function (data) {
    				var results = [];
    				$.each(data, function(index, item){
    					results.push({
    						id: item.id,
    						label: item.title
    					});
    				});
    				return {
    					results: results
    				};
    			}
    		}
    	});
    });
    html
    <input id="Organisation" style="width: 300px;" placeholder="Выберите Организацию">
    Ответ написан
    Комментировать