Сравнение строк, возвращаемых из запроса mySql - PullRequest
2 голосов
/ 16 марта 2012

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

Пример кода может быть таким:

TD-BR-010212-xxxxxxxx

Где TD представляет рекламную акцию, BR представляет место, цифры представляют дату, иостальные случайные.

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

Я предполагаю, что это будет что-то внутри цикла, как у меня уже есть:

$location_part_of_td = $code[2].$code[3];
$date_part_of_td = $code[4].$code[5].$code[6].$code[7].$code[8].$code[9];

$trade_day_result = mysql_query('SELECT * from wp_scloyalty WHERE promotion_type = trade-day') or die(mysql_error());  // Pulls all trade day codes from the database and checks the date part of the code. 

// the date part exists with the same area part, user cant redeem.
while($info = mysql_fetch_array( $trade_day_result )) 
{ 

     $code = $info["product"];

} 

Но я просто не уверен в том, что лучший способ проверить строки..

Ответы [ 5 ]

3 голосов
/ 16 марта 2012

Вы можете использовать предложение MySQL LIKE для получения записей в вашей БД, которые похожи на ваш код.

Пример:

$code_exists = mysql_query( 
      "SELECT 'a' FROM table_name WHERE column_name LIKE 'TD-BR-010212-%'"
);
if(mysql_num_rows($code_exists) > 0) {
    // The specified place/date is taken
} else {
    // No promotion at place BR on the specified date.
}

'%' используется в качестве подстановочного знака в SQL LIKEстатьи.

0 голосов
/ 16 марта 2012

попробуйте этот запрос

$part_code=substr($code, 0)

$records =mysql_query("select id from tableName where SUBSTRING(code,1,12)= $part_code");

if(mysql_num_rows($records) > 0)
{
 // Duplicate exit
}
else
{
 // insert code in DB
}
0 голосов
/ 16 марта 2012

Если вы можете, вы получите лучшую производительность и более простое кодирование, если разбите код на разные поля при сохранении данных в каждой строке.Таким образом, вы можете писать запросы, которые специально проверяют значения для компонентов кода - вы даже можете устанавливать правила в базе данных (например, UNIQUE), чтобы гарантировать, что некоторые части остаются уникальными.

В частности, я бы хотелпредложить:

create table your_table (
    [... your other columns ...]
    promotion char(2),
    place char(2),
    pr_date date,
    pr_ident varchar(50)
)

Ваш первый ряд будет ([...], 'TD', 'BR', '2012-01-02', 'xxxxxxxx').И запросы не требуют распаковки отформатированной строки - вы могли бы сказать что-то вроде «где продвижение = TD и место в (« BR »,« XX ») ...».Просто, а?

0 голосов
/ 16 марта 2012

Я бы использовал оператор LIKE в вашем SELECT и извлекал записи, начинающиеся с той же акции, места и даты. К сожалению, я не знаю, как выглядит ваш стол, так что терпите меня:

$promo_query = "SELECT * FROM wp_sclocalty WHERE column_name LIKE 'TD-BR-010212-%'";
$promo_result = mysql_query($promo_query);

if(mysql_num_rows($promo_result) == 0) {
    // the promo code has NOT been used
} else {
    // the promo code HAS been used
}
0 голосов
/ 16 марта 2012

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

Добавьте уникальное ограничение к основанию таблицы из двух столбцов.

Или выберите подход, выбрав все расположение и дату, и посмотритеэто возвращает любые результаты.SQL: SELECT COUNT(*) as counter FROM table where column = 'TD-BR-010212-%' И проверьте, не вернется ли счетчик> 0;

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