MySQL - COUNT перед INSERT в одном запросе - PullRequest
1 голос
/ 05 сентября 2010

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

  strSQL = "SELECT * FROM productr"

После этого кода, приведенного выше, я добавляю несколько значений продукта к записи следующим образом:

  ID | Product      | Price  | Description      | Qty | DateSold  | gcCode
  --------------------------------------------------------------------------
  5  | The Name 1   | 5.22   | Description 1    | 2   | 09/15/10  | na
  6  | The Name 2   | 15.55  | Description 2    | 1   | 09/15/10  | 05648755
  7  | The Name 3   | 1.10   | Description 3    | 1   | 09/15/10  | na
  8  | The Name 4   | 0.24   | Description 4    | 21  | 09/15/10  | 658140

Мне нужно посчитать, сколько раз он видит gcCode <> 'na', чтобы я мог добавить 1, чтобы он был уникальным. В настоящее время я не знаю, как это сделать, не открывая другую базу данных внутри и делая что-то вроде этого:

  strSQL2 = "SELECT COUNT(gcCode) as gcCount FROM productr WHERE gcCode <> 'na'

Но, как я уже сказал выше, я не хочу открывать другой запрос к базе данных только для подсчета.

Любая помощь будет отличной! Спасибо! : О)

Ответы [ 2 ]

1 голос
/ 05 сентября 2010

Нет необходимости делать все в одном запросе. Если вы используете InnoDB в качестве механизма хранения, вы можете заключить ваш запрос COUNT и команду INSERT в одну транзакцию , чтобы гарантировать атомарность .

Кроме того, вам, вероятно, следует использовать NULL вместо na для полей с неизвестными или отсутствующими значениями.

0 голосов
/ 05 сентября 2010

Это два запроса; один является подмножеством другого, что означает, что получение того, что вы хотите в одном запросе, будет хаком, я не рекомендую:

 SELECT p.*,
        (SELECT COUNT(*)
           FROM PRODUCTR 
          WHERE gccode != 'na') AS gcCount
   FROM PRODUCTR p

Это вернет все строки, как это было ранее. Но он будет включать дополнительный столбец, повторяя значение gcCount для каждой возвращаемой строки. Это работает, но это избыточные данные ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...