2010-09-04 6 views
1

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

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 <> «на», так что я могу добавьте 1, чтобы он был уникальным. В настоящее время я не знаю, как сделать это без открытия другой базы данных внутри этого и делать что-то вроде этого:

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

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

Любая помощь будет замечательной! Благодаря! : o)

+1

Что вы хотите сделать уникальным? –

+0

счетчик gcCode, но мне нужно иметь возможность добавлять новую запись одновременно – StealthRT

ответ

0

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

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

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

1

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

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

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