Запросы отношений «Многие ко многим»

#php #mysql #sql

#php #mysql #sql

Вопрос:

Я немного запутался в таблицах отношений «многие ко многим» и в коде, который к ним прилагается.

У меня есть table1 :

 id, username
 

И table2 :

 id, votes_up, votes_down
 

И вспомогательная таблица ( htable ):

 vu, vd, adsid
 

Я хочу, чтобы при голосовании за или против объявления это голосование не распространялось на все объявления.

Моя попытка выбора данных:

 mysql_query("SELECT * 
             FROM dbo.tab2 
             INNER JOIN dbo.htable 
             WHERE tab2.votes_up = htable.vu 
                AND htable.votes_down = htable.vd 
             INNER JOIN dbo.tab1 
             WHERE htable.adsID = table1.ID");
 

И моя попытка вставки:

 mysql_query("INSERT INTO dbo.htable (vu, vd, adsid)  
             VALUES 
             (SELECT FROM dbo.tab2.votes_up, dbo.tab2.votes_down , dbo.tab1.id)");
 

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

Комментарии:

1. Я с трудом понимаю, что вы говорите. Постарайтесь быть более четкими. Кроме того, вам следует предоставить больше примеров кода и, возможно, более понятный пример структуры таблицы. Из того, что я могу сказать прямо сейчас, вы должны просто использовать несколько отношений «один ко многим», и это должно быть хорошо.

Ответ №1:

Я не совсем понимаю ваш вопрос, но ваши SQL-запросы неверны. Вероятно, они должны быть чем-то вроде:

 SELECT
    *
FROM
    dbo.tab2 as tab2
    INNER JOIN dbo.htable as htable
        ON tab2.votes_up = htable.vu
        AND tab2.votes_down = htable.vd
    INNER JOIN dbo.tab1 as tab1
        ON htable.adsID = tab1.ID
 

и

 INSERT INTO dbo.htable (vu, vd, adsID)
    SELECT
        votes_up, votes_down, ID
    FROM
        dbo.tab2
 

Комментарии:

1. я пробовал этот код, как вы сказали, но, похоже, он просто записывается в моем php-файле, он не выглядит как код, как я написал

2. Это просто операторы SQL. Вы должны передать их в функцию PHP mysql_query(), чтобы фактически выполнить их. И вам также нужно написать код для обработки результата вашего запроса SELECT, но вы должны сделать это сами, поскольку я понятия не имею, как выглядит остальная часть вашего кода.

3. я выполнил ваш код, но он не вставлялся в htable, ничего, и при голосовании forexemple votes_up> 45, и я голосую, тогда будет 46, а когда я обновлю страницу, снова будет 45, и в базе данных ничего не произойдет. какая-либо ошибка здесь?

4. Боюсь, что без более подробной информации о вашем фактическом коде я не смогу вам больше помочь.

5. на моей странице у меня есть код обновления, подобный этому: $ sth = voting::db()->prepare(‘UPDATE’.voting::config(‘database_table_prefix’).’tab2 SET name = ?, closed = ?, votes_up = ?, votes_down = ?, date =? ); //$sth-> выполнить(array($this-> name, $this-> closed, $this-> votes_up, $this-> votes_down, $this-> date, $this-> id)); как написать свой код, подобный этому коду?