SELECT * FROM $table LIKE ...

Petr Pecha rch na d2.cz
Pátek Září 6 16:58:21 CEST 2002


Zdravim, mam tu neco na promazani mozkovych zavitu.

Zasveceni:
Pocitac s Windows a na nem bezici program Nokia Data Suite 3.0.
SMS zpravy program uklada do souboru SmsDB.mdb na ktery se pripojim pomoci
spravce zdroju dat ODBC, kde jako ovladac slouzi Microsoft Access Driver
(*.mdb).
Na mobil chodi SMS zpravy ve tvaru HIT_NUM_NUM_NUM_NUM_NUM,
kde NUM je cislo od 1-24 a _ je misto mezery.
napr. HIT 24 5 10 4 19 (nezalezi  tedy na poradi cisel)

Ted k problemu potreboval bych vybrat pouze ty zpravy, ktere vyhovuji filtru
alespon na pocet cifer (jedno a dvouciferne).
Ale problem nastava v dotazu do databaze ('_' je misto ? a % je misto '*'):

SELECT MessageData FROM sms WHERE MessageData LIKE 'HIT _ _ _ _ _'
pokracovani viz.nize

SELECT MessageData FROM sms WHERE SUBS(MessageData,1,3)='HIT' (bohuzel SUBS
nelze pouzit)

Existuje tusim 32 moznych kombinaci pro pet jedno- a dvou- cifernych cisel,
ale zahrnovat je do jednoho sql dotazu se mi zda neefektivni (viz. nize).
Nezna proto nekdo lepsi postup, ale nejlip pomoci SQL. Zatim se mi zda, ze
dalsi zpracovani bude zrejme muset probenout pomoci php.

Diky vsem kdo me nasmeruji a pomohou
S pozdravem
Petr Pecha

<?
// spojeni na odbc zdroj
$id = odbc_connect ("sms", "admin", "");

// sql dotaz
$result = odbc_exec ($id, "SELECT MessageData FROM sms WHERE
MessageData LIKE 'HIT _ _ _ _ _'
OR MessageData LIKE 'HIT __ _ _ _ _'
OR MessageData LIKE 'HIT _ __ _ _ _'
OR MessageData LIKE 'HIT _ _ __ _ _'
OR MessageData LIKE 'HIT _ _ _ __ _'
OR MessageData LIKE 'HIT _ _ _ _ __'
OR MessageData LIKE 'HIT __ __ _ _ _'
OR MessageData LIKE 'HIT __ _ __ _ _'
OR MessageData LIKE 'HIT __ _ _ __ _'
OR MessageData LIKE 'HIT __ _ _ _ __'
OR MessageData LIKE 'HIT _ __ __ _ _'
OR MessageData LIKE 'HIT _ __ _ __ _'
OR MessageData LIKE 'HIT _ __ _ _ __'
OR MessageData LIKE 'HIT _ _ __ __ _'
OR MessageData LIKE 'HIT _ _ __ _ __'
OR MessageData LIKE 'HIT _ _ _ __ __'
OR MessageData LIKE 'HIT __ __ __ _ _'
OR MessageData LIKE 'HIT __ __ _ __ _'
OR MessageData LIKE 'HIT __ __ _ _ __'
OR MessageData LIKE 'HIT __ _ _ __ __'
OR MessageData LIKE 'HIT __ _ __ _ __'
OR MessageData LIKE 'HIT __ _ __ __ _'
OR MessageData LIKE 'HIT _ __ __ __ _'
OR MessageData LIKE 'HIT _ __ __ _ __'
OR MessageData LIKE 'HIT _ __ _ __ __'
OR MessageData LIKE 'HIT _ _ __ __ __'
OR MessageData LIKE 'HIT __ __ __ __ _'
OR MessageData LIKE 'HIT __ __ __ _ __'
OR MessageData LIKE 'HIT __ __ _ __ __'
OR MessageData LIKE 'HIT __ _ __ __ __'
OR MessageData LIKE 'HIT _ __ __ __ __'
OR MessageData LIKE 'HIT __ __ __ __ __'");

// nacteni vysledku dotazu do pole
// substr pouze umaze ze zpravy zacatek 'HIT '
while ($row = odbc_fetch_row($result)) {
  $zpravy[] = substr(odbc_result ($result, "MessageData"), 4);
}
odbc_free_result ($result);
odbc_close($id);

// pocet vracenych vysledku a zprav ve spravnem tvaru
$zprav = count ($zpravy);

// vypis zpracovanych zprav
for ($i = 0; $i <= $zprav; $i++) {
    print $zpravy[$i]."<br>";
}

?>




Další informace o konferenci Databases