PHP / MySQL, как вставить и / или обновить две таблицы MySQL? - PullRequest
1 голос
/ 03 декабря 2009

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

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

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

Вот мои таблицы 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)
);

1 Ответ

2 голосов
/ 03 декабря 2009

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

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';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...