2009-12-03 3 views
1

Мне было интересно, как я могу обновить две таблицы базы данных с помощью PHP и MySQL? Я хочу добавить вторую таблицу с именем tags_2, которая проверит, существует ли тег уже и добавляет ли он текущий счет в таблице, и если тег не существует, добавьте его в таблицу.PHP/MySQL как вставлять и/или обновлять две таблицы MySQL?

Надеюсь, я объяснил это правильно?

Мне в основном нужна помощь в добавлении правильного кода в нужные места, это почему-то затормозило меня весь день? У меня первая таблица работает, но не вторая?

Ниже приведены мои таблицы MySQL ниже.

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
page TEXT NOT NULL, 
tag VARCHAR(255) NOT NULL, 
count INT NOT NULL, 
PRIMARY KEY (id) 
); 

CREATE TABLE tags_2 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
tag VARCHAR(255) NOT NULL, 
count INT NOT NULL, 
PRIMARY KEY (id) 
); 

И вот мой PHP-скрипт ниже.

<?php 

require_once ('./mysqli_connect.php'); 

if (isset($_POST['submitted'])){ 

     $mysqli = new mysqli("localhost", "root", "", "sitename"); 
     $dbc = mysqli_query($mysqli,"SELECT * FROM tags"); 
    if (!$dbc) { 
     print mysqli_error($mysqli); 
    } 

$page = $_SERVER['SCRIPT_FILENAME']; 

$tag = mysqli_real_escape_string($mysqli, $_POST['tag']); 

$mysqli = new mysqli("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT id, count, page FROM tags WHERE tag='$tag' AND page = '$page'"); 

if(mysqli_num_rows($dbc)){ 
    $tag_info = mysqli_fetch_array($dbc); 
    $tag_info_id = $tag_info["id"]; 
    $tag_info_count = $tag_info["count"] + 1; 

    $mysqli = new mysqli("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"UPDATE tags SET count='$tag_info_count' WHERE id='$tag_info_id'"); 

    echo "$tag now with $tag_info_count instances"; 
} else { 
    $mysqli = new mysqli("localhost", "root", "", "sitename"); 
    $clean_url = mysqli_real_escape_string($mysqli, $page); 
    $dbc = mysqli_query($mysqli,"INSERT INTO tags (tag, count, page) VALUES ('$tag', 1, '$clean_url')"); 

if (!$dbc) { 
     print mysqli_error($mysqli); 
} 
echo "1 record added"; 
} 
mysqli_close($mysqli); 
} 
?> 

Будут ли таблицы выглядеть лучше.

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
page TEXT NOT NULL, 
tag VARCHAR(255) NOT NULL, 
count INT NOT NULL, 
PRIMARY KEY (id) 
); 

CREATE TABLE tags_2 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
tag_id INT UNSIGNED NOT NULL DEFAULT 0, 
tag VARCHAR(255) NOT NULL, 
count INT NOT NULL, 
PRIMARY KEY (id) 
); 

ответ

2

Во-первых, ваша схема не нормируется. Поместите все данные о тегах в одну таблицу. Поместите данные о страницах в другую таблицу. В таблице страниц, включают в себя внешний ключ, ссылающийся на первичный ключ таблицы тегов:

CREATE TABLE pages(
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
page TEXT NOT NULL, 
tag_id INT UNSIGNED, 
tag_count INT NOT NULL DEFAULT 0, //count is a reserved word 
PRIMARY KEY (id), 
FOREIGN KEY (tag_id) REFERENCES tags(id) 
         ON DELETE RESTRICT 

); 

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
tag VARCHAR(255) NOT NULL, 
PRIMARY KEY (id) 
); 

Тогда, в псевдокоде, ваши запросы становятся:

$var= SELECT id FROM tags WHERE tag='somestring'; 
if $var!=0 { 
    UPDATE pages SET tag_id=$var, 
        tag_count=tag_count+1 
    WHERE page_id='a page id'; 
} 
+0

не было бы лучше, если бы я просто проверьте, совпадает ли имя тега с другим именем тега в первой таблице? –

+1

позволяет mysql дольше проверять VARCHAR, а затем проверять INT ... если ваша БД растет, проверяется, что каждое имя займет больше времени и больше, чтобы вернуть результат ... лучше всего реализовать, как предлагает dnagirl. – luckykind

+0

, но я не буду указывать, какой тег принадлежит идентификатору, когда пользователи отправляют тег. Как я могу бороться с этой проблемой. –

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