2009-08-03 2 views
1

Нужна ваша помощь с sql-запросом и php.SQL-запрос и preg_match

меня на куски кода здесь:
1.

$sql = "SELECT SUBSTR(n.`title`, 1,1) FROM node n WHERE n.`type` = 'type1'"; 
$results = db_query($sql); 
while ($fields = db_fetch_array($results)) { 
    foreach($fields as $key => $value) { 
    echo $value; 
    } 
} 

Код выше возвращает первые буквы моих заголовков статей (таблица - узлы, колонны - тип, название), как это - NHDKFLF .. .

2.

if (preg_match ('/A/i', $string)) { 
    echo ('Contains letter A'); // 
} 
else { 
    echo ('Nothing'); // 
}  

И второй проверяет часть, если строка содержит определенные буквы.

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

Заранее спасибо.

ответ

0

Почему бы вам просто не запросить те, которые вы хотите?

... where SUBSTR(n.`title`, 1,1) = 'A' ... 

Если вы должны фильтровать в своем коде, вне запроса, а затем:

foreach($fields as $key => $value) { 
    if (preg_match ('/A/i', $value)) { 
     ... 
} 
1

Два варианта приходят на ум: Делайте то, что вы делаете сейчас, или переписать SQL, чтобы сделать оба сразу.

Вариант 1:

$sql = "SELECT SUBSTR(n.`title`, 1,1) FROM node n WHERE n.`type` = 'type1'"; 
$results = db_query($sql); 
while ($fields = db_fetch_array($results)) { 
    foreach($fields as $key => $value) { 
    if (preg_match ('/A/i', $value)) { 
     echo ('Contains letter A'); // 
    } else { 
     echo ('Nothing'); // 
    } 
    } 
} 

Вариант 2:

$sql = "SELECT SUBSTR(n.`title`, 1,1) FROM node n WHERE n.`type` = 'type1' AND SUBSTR(n.`title`, 1,1) = 'A' "; 

В зависимости от остальной части детали вашего проекта есть, вероятно, лучший способ справиться с этим.

+0

Спасибо за ваш ответ. Я попробовал первый вариант, и он возвращает что-то вроде: NothingNothingNothingNothing ... Содержит письмо A ... NothingNothing ... Вот почему я хотел отделить свою часть sql и как-нибудь (если возможно) одну строку с первыми буквами. После этого попробуйте проверить, есть ли в этой строке такие буквы: if (preg_match ('/ A/i', $ value)) { ... if (preg_match ('/ B/i', $ value)) { ... – 2009-08-04 05:44:05