$at = array ();
$w3 = mysql_query("SELECT * FROM cat WHERE shop='".$id."'");
while($a3 = mysql_fetch_assoc($w3)){
$w2 = mysql_query("SELECT * FROM scat WHERE cat='".$a3['id']."'");
while($a2 = mysql_fetch_assoc($w2)){
$w1 = mysql_query("SELECT * FROM sscat WHERE scat='".$a2['id']."'");
while($a1 = mysql_fetch_assoc($w1)){
$at[] = $a1['id'];
}
}
}
Спустя 11 минут, 36 секунд (25.01.2011 - 01:17) inpost написал(а):
Что это вообще такое? Что достаётся?
У тебя вообще стоит SELECT *, поэтому неизвестны поля таблицы.
У тебя вообще стоит SELECT *, поэтому неизвестны поля таблицы.
Спустя 7 минут, 8 секунд (25.01.2011 - 01:24) inpost написал(а):
Делай первую выборку, всё полученное в массив, вторую выборку из массива
WHERE `id` IN (тут через запятую, объеденяй через implode)
WHERE `id` IN (тут через запятую, объеденяй через implode)
Спустя 9 минут, 30 секунд (25.01.2011 - 01:34) Jekel написал(а):
так это уже потом делается
$a = mysql_query("SELECT * FROM `products` WHERE `active`=1 AND `sscat` IN (" . join(',', $at) . ") ORDER BY RAND() DESC LIMIT 9");
$a = mysql_query("SELECT * FROM `products` WHERE `active`=1 AND `sscat` IN (" . join(',', $at) . ") ORDER BY RAND() DESC LIMIT 9");
Спустя 3 минуты, 38 секунд (25.01.2011 - 01:37) Jekel написал(а):
в бд таблици cat, scat, sscat, products (категории, субкатегории, суб-субкатегории, продукты)
код:
дано $id это номер магазина (их вообще два) в зависимости от номера надо вывести 9 случайных товаров.
столбец shop (тоесть номер магазина) есть только в табличке cat...вот я и пытаюсь через категории выйти на все товары из $id магазина и вывести из них 9 случайных товаров
кароче я получаю список всех суб-субкатегорий и по ним фильтрую товары)
код:
дано $id это номер магазина (их вообще два) в зависимости от номера надо вывести 9 случайных товаров.
столбец shop (тоесть номер магазина) есть только в табличке cat...вот я и пытаюсь через категории выйти на все товары из $id магазина и вывести из них 9 случайных товаров
кароче я получаю список всех суб-субкатегорий и по ним фильтрую товары)
Спустя 6 минут, 49 секунд (25.01.2011 - 01:44) Evilsoul написал(а):
Что-то ты сильнл закрутил...
ЭТО РЕАЛЬНО, если ты напишешь какие таблицы, что там и с чем их едят.
Желательно пример, так как таблиц у тебя 4.
тоисть
таблица:1
|id|...|...|...
таблица:2
|id|...|...|...
таблица:3
|id|...|...|...
таблица:4
|id|...|...|...
ЭТО РЕАЛЬНО, если ты напишешь какие таблицы, что там и с чем их едят.
Желательно пример, так как таблиц у тебя 4.
тоисть
таблица:1
|id|...|...|...
таблица:2
|id|...|...|...
таблица:3
|id|...|...|...
таблица:4
|id|...|...|...
Спустя 4 минуты (25.01.2011 - 01:48) Jekel написал(а):
cat
id|name|shop
scat
id|name|cat
sscat
id|name|scat
products
id|name|sscat
id|name|shop
scat
id|name|cat
sscat
id|name|scat
products
id|name|sscat
Спустя 8 минут, 21 секунда (25.01.2011 - 01:56) Evilsoul написал(а):
"SELECT * FROM `cat`, `scat`, `sscat`
WHERE `shop`.`cat` ='".$id."'
AND `shop`.`cat`= `id`.`scat`
AND `id`.`scat`=`id`.`sscat`"
ток проверь, я не помню, или столбец таблицы перед точкой или имя таблици. уже спать иду...
Спустя 9 минут, 5 секунд (25.01.2011 - 02:06) inpost написал(а):
Jekel
Ты так и не сказал, что в итоге всей выборки ты получаешь? Лишь ID как по примеру, или все данные?
Ты так и не сказал, что в итоге всей выборки ты получаешь? Лишь ID как по примеру, или все данные?
Спустя 2 минуты, 7 секунд (25.01.2011 - 02:08) Админ написал(а):
тут структуру таблиц надо менять а не циклы городить
Спустя 5 минут, 20 секунд (25.01.2011 - 02:13) inpost написал(а):
Вообщем, структура такая:
id, name, cat_lvl1, cat_lvl2, cat_lvl3.
Допустим первого уровня выглядит так:
1 , Товары легкие, 0
Второго уровня:
2, игрушки, 1, 0
Третьего уровня:
3, модельки, 5,3,0
Если 0, значит данного уровня товар, если другое значение, значит это вложенность. Если число не 0, то это порядковый номер.
id, name, cat_lvl1, cat_lvl2, cat_lvl3.
Допустим первого уровня выглядит так:
1 , Товары легкие, 0
Второго уровня:
2, игрушки, 1, 0
Третьего уровня:
3, модельки, 5,3,0
Если 0, значит данного уровня товар, если другое значение, значит это вложенность. Если число не 0, то это порядковый номер.
Спустя 12 минут, 56 секунд (25.01.2011 - 02:26) Jekel написал(а):
структура это же пример я дал..там все сложнее и менять не надо ничего
Evilsoul толк написал, ща проверю
Evilsoul толк написал, ща проверю
Спустя 6 минут, 55 секунд (25.01.2011 - 02:33) Jekel написал(а):
$a = mysql_query("SELECT * FROM `products`, `cat`, `scat`, `sscat` WHERE `shop`.`cat`='".$id."' AND `id`.`cat`=`cat`.`scat` AND `id`.`scat`=`scat`.`sscat` AND `id`.`sscat`=`sscat`.`products` ORDER BY RAND() DESC LIMIT 9");
вот так должно быть, но оно не фурычит
вот так должно быть, но оно не фурычит
Спустя 3 минуты, 6 секунд (25.01.2011 - 02:36) Invis1ble написал(а):
имхо, там join юзать надо в запросах...
Спустя 1 минута, 31 секунда (25.01.2011 - 02:37) Jekel написал(а):
юзал, а таким условием не получится? так оно даже ошибок не дает
Спустя 7 минут, 13 секунд (25.01.2011 - 02:45) Invis1ble написал(а):
Jekel
я говорю про мускульный JOIN, а не про пхп-шную ф-цию join()
я говорю про мускульный JOIN, а не про пхп-шную ф-цию join()
Цитата |
таким условием не получится? так оно даже ошибок не дает |
не уверен, но вроде и не должно получаться... кривой запрос, имхо
Спустя 3 минуты, 22 секунды (25.01.2011 - 02:48) Jekel написал(а):
мда, наоборот просто писать надо было)))
ща гляну join, спасибо
@$a = mysql_query("SELECT * FROM `cat`, `scat`, `sscat`, `products`
WHERE `cat`.`shop`=".$id." AND `cat`.`id`=`scat`.`cat` AND `scat`.`id`=`sscat`.`scat` AND `sscat`.`id`=`products`.`sscat` ORDER BY RAND() DESC LIMIT 9");
ща гляну join, спасибо
Спустя 28 минут, 51 секунда (25.01.2011 - 03:17) inpost написал(а):
SELECT * FROM `table1`
while()
$temp1[] = $row['id'];
SELECT * FROM table2 WHERE `id` IN (implode(',',$temp1))
while()
temp2[] = $row['id'];
SELECT * FROM `table3` WHERE `id` IN (implode(',',$temp2))
while()
$id[] = $row['id'];
3 запроса, не всегда вложенные запросы бывают быстрее! Таких 3 могут обогнать обычный общий. Надо тестировать и проверять, но это один из оптимальных для большого выбора.
Спустя 5 часов, 25 минут, 58 секунд (25.01.2011 - 08:43) Evilsoul написал(а):
Jekel
Я же тебе говорил, проверь, а то сонный был
)))
Invis1ble
Зачем ему JOIN? Джоин лепит из нескольких таблиц одну а ему нужна выборка одно значение = другому И другое = третьему и т.д.
Я же тебе говорил, проверь, а то сонный был

Invis1ble
Зачем ему JOIN? Джоин лепит из нескольких таблиц одну а ему нужна выборка одно значение = другому И другое = третьему и т.д.
Спустя 8 часов, 35 минут, 55 секунд (25.01.2011 - 17:19) Invis1ble написал(а):
не знаю, я особо не вникал ) просто предположение высказал
Спустя 11 минут, 56 секунд (25.01.2011 - 17:31) linker написал(а):
SELECT FROM `table1`, `table2`равносилен
SELECT FROM `table1`
LEFT JOIN `table2`