Автор Тема: explode, mysql_query  (Прочитано 6433 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« : 24 Февраля 2003, 22:47:02 »
shto ja delaju ne tak?
danyje v baze takije:
$templates.directions - "/1/2/3/4/5/6/7/"
$registry ja poluchiaju tozhe - "/3/5/32/43/"

$registry 
explode ("/"$row_track["templates"]);
$size sizeof($registry);
for (
$i=1$i<$size;$i++)
{
           
$result mysql_query("SELECT * FROM $templates$orders WHERE $orders.latest > \'$dead\' AND
           
$orders.pref_reg = $templates.id AND
           
$templates.directions LIKE \'%/$registry[$i]/%\'
           ORDER BY date DESC"
);
}


mysql_count_rows($result) vsio vremia pokazyvajet 0, shto nado popravit?

spasibo

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #1 : 24 Февраля 2003, 22:50:54 »
а то будет, если вместо:

$result 
mysql_query("SELECT * FROM $templates$orders WHERE $orders.latest > \'$dead\' AND
           
$orders.pref_reg = $templates.id AND
           
$templates.directions LIKE \'%$registry[$i]%\'
           ORDER BY date DESC"
);

поставить

$result 
mysql_query("SELECT * FROM $templates$orders WHERE $orders.latest > \'$dead\' AND
           
$orders.pref_reg = $templates.id AND
           
$templates.directions LIKE \'%$registry[$i]%\'
           ORDER BY date DESC"
) or die(mysql_error());



??
AS IS...

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #2 : 24 Февраля 2003, 22:56:23 »
Цитировать
or die(mysql_error());


nichevo ne pokazyvajet, vsio, vychodit, shto vsio delajet normalno, no jesli ja zdelaju tak:

Цитировать
$size = (sizeof($registry)-2);
for ($i=1; $i<$size;$i++)
{

togda pokazyvajet te zapisi, kotoryje mne nuzhny, no jesli iz $registry prichodit tol\'ko odna zapis ($registry = "/3/")
togda opiat\' nichevo ne pokazyvajet ;(

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #3 : 24 Февраля 2003, 22:59:23 »
jeshshio odna detal, pochemu ja delal sizeof($registry) - 2 - eto potomu, shto explode delaet na 2 zapisi bolshe, chem nado

Оффлайн semya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 0
    • Просмотр профиля
explode, mysql_query
« Ответ #4 : 25 Февраля 2003, 17:07:21 »
а на две записи больше он делает потому что, у тебя строка из базы начинается с / и по нему же ты и разбиваешь... сначала удали начальный и конечный слэш, substr(..) например

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #5 : 25 Февраля 2003, 17:32:28 »
Цитировать
no jesli iz $registry prichodit tol\'ko odna zapis ($registry = "/3/")

Естественно, не показывает -
3-2=1;
1<1=false

Надо sizeof(...)-1; Либо <= вместо <
TANSTAAFL

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #6 : 26 Февраля 2003, 09:56:11 »
Цитировать
substr(..)


da, eto pomoglo  v kakom to smysle...

seichas narvalsia na druguju problemu:

                    $track_n 
substr($row_track["templates"], 1, -1);
                    
$registry explode ("/"$track_n);
                    for (
$i=0;$i<sizeof($registry);$i++)
                    {
                        
$result mysql_query("SELECT * FROM $templates$orders
                                          WHERE 
$orders.latest > \'$dead\' AND
                                          
$orders.pref_reg = $templates.id AND
                                          
$templates.directions LIKE \'%/$registry[$i]/%\'
                                          ORDER BY date DESC"
) or die(mysql_error());

            if (
mysql_num_rows($result) > 0)
            {

                while (
$row mysql_fetch_array($result))
                {
...
}}}


eto pokazyvajet vse rezultaty, daze odinakovyje, to jest\' oni povtoriajutsa (potomu shto v $registry i v $result mnogoje sovpadajet), podskazhite kak zdelat, shtoby vydaval tol\'ko unique na primer po id?
ili kak mne eto perepisat\'?

Оффлайн semya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 0
    • Просмотр профиля
explode, mysql_query
« Ответ #7 : 26 Февраля 2003, 10:29:18 »
а так не получается? SELECT distinct id FROM $templates$orders WHERE ... а потом по этому id выбираешь все остальное. тогд аполучишь точно уникальные записи...

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #8 : 26 Февраля 2003, 10:40:57 »
Цитировать
SELECT distinct id FROM $templates, $orders WHERE $


da, eto tak, no smysl v tom, shto eto vsio ciklom vyvoditsa, i esli na primer u menia tak:
$templates.directions - "/1/2/3/4/5/6/7/"
$registry ja poluchiaju tozhe - "/1/2/3/4/5/6/7/"

togda ja poluchiu 7 odinakovych zapisej ->
for
{
vybiraem $result
print $result;
}

a esli ja delaju tak:
for
{
vybiraem $result
}
print $result;

togda vydaet posledniuju zapis, esli ona sovpala...

i golova moja durnaja ne mozhet poniat, kak iz etogo vyputatsa...

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #9 : 26 Февраля 2003, 13:42:20 »
a mozhno li s eval() shtoto zdelat\'?

jesli na primer ja sdelaju tak:

for ($i=0;$i<sizeof($registry);$i++)
{
  
$str "$templates.directions LIKE \'%/$registry[$i]/%\' OR";
  eval (
"\\$str = \\"$str\\";");
}

$result mysql_query("SELECT * FROM $templates$orders
WHERE 
$orders.latest > \'$dead\' AND
$orders.pref_reg = $templates.id AND
$str
ORDER BY date DESC"
) or die(mysql_error());

...


tolko ne znaju kak vydelit\' poslednij element masiva, shtoby
vykinut\' poslednij OR iz mysql_query

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #10 : 26 Февраля 2003, 15:32:22 »
Что-то я не понимаю хитросплетений твоих алгоритмов...
Все просто, а ты усложняешь...
Генерим из "/1/2/3/4/5/6/" SQL-запрос:

$registry
=explode(\'/\',$row_track["templates"]);
$str=\'\';
foreach($registry as $value)
    if ($value!=\'\') $str.=" $templates.directions LIKE \'%/$value/%\' OR";
$str=substr($str,0,-3);
$res=mysql_qeury("SELECT * FROM $templates, $orders
WHERE $orders.latest > \'$dead\' AND
$orders.pref_reg = $templates.id AND
$str
ORDER BY date DESC") or die(mysql_error());
TANSTAAFL

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #11 : 26 Февраля 2003, 15:44:25 »
nu vot, shto dve golovy, eto ne odna ;)

spasibo! ;)

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #12 : 26 Февраля 2003, 15:48:08 »
Пожалуйста (можешь за меня проголосовать ;) )
И что, работает?
TANSTAAFL

Оффлайн dope

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #13 : 26 Февраля 2003, 15:58:00 »
vecherom proveriu, seichias ne mogu, no vygliadit, shto dolzhno rabotat\' ;)

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
explode, mysql_query
« Ответ #14 : 26 Февраля 2003, 16:05:58 »
Кстати,
1) Если у тебя в среди чисел может встречаться ноль, тогда  $value!= замени на $value!==
2) Использовать foreach с проверкой все-таки хуже, чем просто цикл от 1 до sizeof(...)-1 (кстати, для справки, цикл просто до sizeof(...) выполняется, когда тебе нужно пройти ВЕСЬ массив. Я тебе это уже указывал, но ты посчитал лучше резать строку)
TANSTAAFL

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28