MySQL запрос не работает в phpmyadmin - PullRequest
0 голосов
/ 03 мая 2011

Я не понимаю, почему мой запрос не работает:

INSERT INTO `jos_acymailing_subscriber`(`sleep_breathe`)
  VALUE (`1`)

SELECT `subid` 
  FROM `jos_acymailing_listsub` 
  WHERE `listid` = `8`
   LEFT JOIN `jos_acymailing_subscriber`
  ON `jos_acymailing_listsub`.`subid` = `jos_acymailing_subscriber`.`sleep_breathe`

thx

У меня есть таблица пользователей, которые подписаны на списки рассылки (идентификатор списка Iменя интересует это 8).Таблица подписки представляет собой простую промежуточную таблицу в отношении «многие ко многим»

. В таблице пользователей я хочу добавить в поле целое число с 1 для пользователей, которые подписаны на список 8

Поэтому мне нужно сначала выбрать пользователей, которые находятся в промежуточной таблице, где listid равен 8, а затем добавить 1 в поле sleep_breathe, которое находится в пользовательской таблице.

Структура пользовательской таблицы: name: jos_acymailing_subscriber

Тип поля Null По умолчанию Комментарии subid int (10) Нет
email varchar (200) Нет
userid int (10) Да NULL
имя varchar (250) Нет
создан int(10) Да NULL
подтверждено tinyint (4) Нет 0
включено tinyint (4) Нет 1
принять tinyint (4) Нет 1
ip varchar (100) Да NULL
html tinyint(4) Нет 1
ключевой varchar (250) Да NULL
ersmembershipnumber varchar (250) Да NULL
первый varchar (250) Да NULL
название varchar (250) Да NULL
erj varchar(250) Да NULL
err varchar (250) Да NULL
монографияvarchar (250) Да NULL
дышать varchar (250) Да NULL
членство в категории varchar (250) Да NULL
mship_status varchar (250) Да NULL
copd varchar (250) Да NULL
sleep_breathevarchar (250) Да NULL
pro varchar (250) Да NULL

Структура промежуточной таблицы: name: jos_acymailing_listsub

Тип поля Null По умолчанию Комментарии listid smallint (11) Нет
subid int (11) Нет
subdate int (11) Да NULL
unsubdate int (11) Да NULL
статус tinyint (4) Нет

Ответы [ 4 ]

3 голосов
/ 03 мая 2011

Я думаю, проблема в том, что вы поставили VALUE вместо VALUES.

Остается VALUES, даже если для вставки есть только одно значение.

0 голосов
/ 03 мая 2011

(1) Это должно быть VALUES, а не VALUE во вставке. (2) left join является частью предложения from. Переместите предложение where в конец.

0 голосов
/ 03 мая 2011

В этом утверждении есть несколько ошибок.

  • Если вы хотите вставить значения, извлеченные из оператора SELECT, предложение VALUES не нужно (на самом деле это ошибка).
  • Числа не могут быть заключены в кавычки или даже кавычки.
  • Порядок ключевых слов FROM и LEFT JOIN перепутан.

Запрос на вставку значений, извлеченных из SELECT, будет:

INSERT INTO jos_acymailing_subscriber (sleep_breathe)
SELECT 1
FROM jos_acymailing_listsub
  LEFT JOIN jos_acymailing_subscriber
     ON jos_acymailing_listsub.subid = jos_acymailing_subscriber.sleep_breathe
WHERE listid = 8

Один совет: забудьте о страшных пристрастиях, чтобы не запутаться, где и для чего они вам нужны.

0 голосов
/ 03 мая 2011

Как уже говорили другие, это два запроса.Кроме того, ЦЕННОСТИ не ЗНАЧЕНИЕ.В-третьих, я не уверен, что MySQL разрешает WHERE перед JOIN.Ваши запросы могут быть

INSERT INTO `jos_acymailing_subscriber`(`sleep_breathe`) VALUES (`1`);

SELECT `subid` 
FROM `jos_acymailing_listsub` 
LEFT JOIN `jos_acymailing_subscriber`
ON `jos_acymailing_listsub`.`subid` = `jos_acymailing_subscriber`.`sleep_breathe`
WHERE `listid` = `8;
...