ОФФ. есть такой литератур "Самоучитель MYSQL 5" Кузнецова и Симдянова это мастхав. Гениальная книжка. По соотношению полезность:цена самая полезная и самая дешевая. Там 99% закрывают вопросов, которые сюда постят. ЗЫ. Я думаю вопросы здесь в основном от незнания SQL
Code: $list = query("SELECT DISTINCT country FROM stats WHERE sid = 2 and country != ''") foreach( $list as $country ) { SELECT count(country) FROM stats WHERE sid = 2 and country = '{$country}' } Из первого запроса, получаю список активных стран, второй запрос служит для определения количества записей по той или иной страны, вопрос состоит в том, можно ли сделать проще, а то запросов уж много получается в цикле...
shellz[21h] Code: SELECT country, count(country) FROM stats WHERE sid=2 and country!='' GROUP BY country
Как можно оптимизировать данный запрос ? SELECT DISTINCT h.`map`,h.`pl`,m.`mpl` FROM `hist` as h, (SELECT max(`pl`) as `mpl`, `map` FROM `hist` GROUP by `map`) m WHERE h.`map`=m.`map` and h.`pl`=m.`mpl` ORDER by m.`mpl` DESC LIMIT 10 Данный запрос выводит из таблицы 10 максимальныx значений pl Заранее спасибо!
Есть таблица : table ======================================= | id(int) | name(varchar) | list(varchar) | ======================================= | 1 | Product | abc,cba,123,12:23:44 | ======================================= как прибавить в колонку list новую строку, не считываю до этого SELECT-ом (SELECT list FROM table), а на UPDATE-е? вот запрос: INSERT INTO `table` (`name`,`list`) VALUES ('$name', '$list') ON DUPLICATE KEY UPDATE `list`= [и вот тут как-то можно манипулировать? типо `list` + '$new_line'] а может как-то и select можно применить внутри ?
Я чего-то не понимаю, или то что вы делаете подзапросом - как раз то, что вам нужно? Code: SELECT `map`, max(`pl`) as `mpl` FROM `hist` GROUP BY `map` ORDER BY `mpl` DESC LIMIT 10 Qwert321 concat() испольуйте Code: INSERT INTO `table` (`name`,`list`) VALUES ('$name', '$list') ON DUPLICATE KEY UPDATE `list`= concat(`list`, 'new_line')
Nightmarе Ваш исходный код и так останавливается, когда все строки обработаны. Хотя если быть совсем точным, то следует делать так: PHP: $result=mysql_query("SELECT * from users"); while(($row=mysql_fetch_assoc($result))!==FALSE) { тут выводятся данные в цикле } mironich код, внутри ваших фигурных скобок никогда не выполнится, остановка произойдет раньше
Так что в моём варианте не устраивает? PHP: $result=mysql_query("SELECT * from users"); $i = 0; while(($row=mysql_fetch_assoc($result))!==FALSE) { тут выводятся данные в цикле if ($i++ == mysql_num_rows($result)) { echo 'Конец'; } }
Nightmarе PHP: $result=mysql_query("SELECT * from users"); if (mysql_num_rows($result) > 0) { while($row=mysql_fetch_assoc($result)) { тут выводятся данные в цикле } echo 'Все записи выведены'; } else {echo 'Записей нет';} Не могли бы вы вообще сразу формулировать, что хотите
Возможно както оптимизировать данный запрос? Code: SELECT DISTINCT `t1`.`left_key`,`t1`.`right_key`,`t1`.`blog_id`,`t1`.`level` FROM `wp_wnm_blogs_tree` AS `t1` , `wp_wnm_blogs_tree` AS `t2` WHERE `t2`.`blog_id` IN (1,38,37,36,35,33) AND (`t1`.`left_key` >= `t2`.`left_key` AND `t1`.`right_key` <= `t2`.`right_key` AND (`t1`.`level` <= (SELECT `t3`.`level` FROM `wp_wnm_blogs_tree` AS `t3` WHERE `t3`.`blog_id` IN (1,38,37,36,35,33) ORDER BY `t3`.`level` LIMIT 1) + 1 )) AND `t1`.`blog_id` IN (1,38,37) ORDER BY `t1`.`left_key`
Ошибок в таблицах нет? t1, t2, t3 алиасы одной и тоже таблицы - wp_wnm_blogs_tree Зачем сравнивать "сам с собой"? Дальше "маневры" and'ами мусорные телодвижения. ИМХО это даже будет показывать тоже что и "оригинал": Code: SELECT DISTINCT `t1`.`left_key`,`t1`.`right_key`,`t1`.`blog_id`,`t1`.`level` FROM `wp_wnm_blogs_tree` AS `t1` WHERE `t1`.`blog_id` IN (1,38,37,36,35,33) ORDER BY `t1`.`left_key`
Сравнение в бд стоит cp1251_general_ci, если писать ручками, то все нормально, но если вводить данные скриптом: PHP: <?php $dir = "dir"; //задаём имя директории if(is_dir($dir)) { //проверяем наличие директории echo $dir.' - директория существует;<br>'; $files = scandir($dir); //сканируем (получаем массив файлов) array_shift($files); // удаляем из массива '.' array_shift($files); // удаляем из массива '..' $host = 'localhost'; $user = 'root'; $pass = ''; $db = 'dbname'; if (!(mysql_connect($host, $user, $pass))) die ('MySQL connection error'); if (!(mysql_select_db($db))) die ('There is no such database'); foreach ($files as $values) { //выводим все файл $pos = strpos($values, "."); $values = substr($values, 0, $pos); echo $values . "<br>"; $query = "INSERT INTO users (name, rate) values ('$values', 400);"; if(!mysql_query($query)) { die ('Error'); } echo "Data was added successfully<br>"; } } else echo $dir.' -такой директории нет;<br>'; ?> То возникают проблемы с кодировкой(выводятся ???), как можно исправить?
не совсем... мне нужны строки с минимальным `level` тоесть там level моет быть 2,5,3,4,8 а мне нуже только строки с минимальным лэвэлом .. тоесть level = 2 а манипуляции с эндами тоже не просто так.. это выбор всех дочерних веток в дереве ... это таблица дерева..
Code: SELECT DISTINCT t1.left_key, t1.right_key, t1.blog_id, t1.level FROM (SELECT * FROM wp_wnm_blogs_tree WHERE blog_id IN (1,38,37,36,35,33)) AS t1, (SELECT MIN(level) AS mini FROM wp_wnm_blogs_tree WHERE blog_id IN (1,38,37,36,35,33)) AS t2 WHERE t1.level=t2.mini ORDER BY t1.left_key; так мэйби