Имею:
$mass=10,20,30,30,40;
$mas = array_unique($mass);
$line = count($mas);
$NEXT='WHERE';
for($i=0;$i<=$line;$i++)
{
if($i==0){$NEXT .='`id`='.$mas[$i];}
else if($i==$line){$NEXT .=' OR `id`='.$mas[$i];}
else {$NEXT .=' OR `id`='.$mas[$i];}
}
$sql="SELECT * FROM `product` ".$NEXT;
$res=mysql_query($sql) or die(mysql_error());
Попадаю на ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OR `id`=20' at line 1
на выходе $sql выдает
SELECT * FROM `product` WHERE`id`=23 OR `id`=22 OR `id`= OR `id`=20
т.е. отсутствует 3 элемент массива.
вопрос почему учитываются все элементы первоначального массива, ведь я же сделал выборку $mas = array_unique($mass);
Как правильно написать?
Спустя 10 минут, 19 секунд (7.04.2012 - 00:11) dadli написал(а):
что ето ?
Цитата |
$mass=10,20,30,30,40; |
Спустя 5 минут, 28 секунд (7.04.2012 - 00:17) Strannik написал(а):
элементы массива
Спустя 29 секунд (7.04.2012 - 00:17) Jack_White написал(а):
массив не так объявляется
Цитата (Strannik @ 6.04.2012 - 21:01) |
$mass=10,20,30,30,40; |
а вот так тогда
$mass=Array(10,20,30,30,40);
в строке
Цитата (Strannik @ 6.04.2012 - 21:01) |
$NEXT='WHERE'; |
после $NEXT='WHERE '; - пробел поставь а то сливается
Спустя 20 секунд (7.04.2012 - 00:17) Strannik написал(а):
т.е. мы сначала имеем один массив, затем из него выбираем уникальные значения
Спустя 2 минуты, 4 секунды (7.04.2012 - 00:19) Strannik написал(а):
там массив нормально объявляется, я привел как пример.
народ вы не туда смотрите!
ошибка в sql из за того, что отсутствует один из элементов массива, а массив уникальный и данный повторяющийся элемент вообще не должен учитываться, от и интересно почему он тоже считается в цикле...
SELECT * FROM `product` WHERE`id`=23 OR `id`=22 OR `id`= OR `id`=20
народ вы не туда смотрите!
ошибка в sql из за того, что отсутствует один из элементов массива, а массив уникальный и данный повторяющийся элемент вообще не должен учитываться, от и интересно почему он тоже считается в цикле...
SELECT * FROM `product` WHERE`id`=23 OR `id`=22 OR `id`= OR `id`=20
Спустя 7 минут, 6 секунд (7.04.2012 - 00:26) dadli написал(а):
Strannik
?
$mass=array(10,20,30,30,40);
$mas = array_unique($mass);
$line = implode(",",$mas);
$NEXT='WHERE id IN( '.$line.' )';
$sql="SELECT * FROM `product` ".$NEXT;
$res=mysql_query($sql) or die(mysql_error());
?
Спустя 1 минута, 21 секунда (7.04.2012 - 00:28) Jack_White написал(а):
Strannik
ну по коду что ты выложил тебе отписался приведи нормальный код, а то у тя в массиве одни значения а получаешь совсем другие
ну по коду что ты выложил тебе отписался приведи нормальный код, а то у тя в массиве одни значения а получаешь совсем другие
Цитата (Strannik @ 6.04.2012 - 21:01) |
10,20,30,30,40 |
Цитата (Strannik @ 6.04.2012 - 21:01) |
23 OR `id`=22 OR `id`= OR `id`=20 |
Спустя 14 минут, 30 секунд (7.04.2012 - 00:42) Placido написал(а):
Цитата (Strannik @ 6.04.2012 - 23:17) |
т.е. мы сначала имеем один массив, затем из него выбираем уникальные значения |
Значения то уникальные, но ключи остаются прежними (т.е. array(1 => 10, 2 => 20, 3 => 30, 5=> 40)

И, кстати, dadli дал хорошое решение.
Спустя 20 минут, 2 секунды (7.04.2012 - 01:02) Strannik написал(а):
спасибо народ) все получилось.
отдельное спасибо dadli за развитие познаний о массивах и Placido за намек о ключах.
отдельное спасибо dadli за развитие познаний о массивах и Placido за намек о ключах.