Как можно ускорить работу с MySQL! Помогите ПЛИЗ!
1.
Константин (26.07.2010 / 22:07)
Есть массив данных к примеру 1000 данных, нужно считать их из $data в базу
$data = array_unique ( $data );
foreach ( $data AS $mobile ){
if ( mysql_num_rows ( mysql_query ( "SELECT `blablabla` FROM `mobi` WHERE `blablabla`=". $mobile) ) == 0 )
mysql_unbuffered_query ( "INSERT INTO `mobi` SET `blablabla`='$mobile'" );
}
Как это дело можно ускорить?
2.
ктулху (26.07.2010 / 22:51)
O_o надо сначала прогонять массив составляя запрос, а потом слать этот большой запрос. а не запрос в цикле
3.
Женек (26.07.2010 / 23:30)
Да, нужно убирать цикл
4.
Константин (26.07.2010 / 23:33)
Насчет цикла, да, может кто подскажет код, к посту №2, если кому-то не лень)
5.
Женек (26.07.2010 / 23:52)
Напиши код который у тебя, без блааа и бляя
6.
Константин (26.07.2010 / 23:55)
$data = array_unique ( $data );
foreach ( $data AS $mobile ){
if ( mysql_num_rows ( mysql_query ( "SELECT `num` FROM `mobi` WHERE `num`=". $mobile) ) == 0 )
mysql_unbuffered_query ( "INSERT INTO `mobi` SET `num`='$mobile'" );
}
7.
Женек (27.07.2010 / 00:06)
Удалено
8.
Женек (27.07.2010 / 00:07)
$data = array_unique ( $data );
if ( mysql_num_rows ( mysql_query ( "SELECT `num` FROM `mobi` WHERE `num`=".implode (', ', $data)) ) == 0 )
mysql_unbuffered_query ( "INSERT INTO `mobi` SET `num`='".implode (', ', $data)."'" );
типа этого, там с кавычками разберись, я с тела и сонный
во, вроди поправил кавычки
9.
Константин (27.07.2010 / 00:20)
Warning: mysql_num_rows() expects parameter 1 to be resource, string given in
Warning: implode() [function.implode]: Invalid arguments passed in
10.
Женек (27.07.2010 / 00:39)
Бле свое сообщение вижу не полностью, скопируй и вставь без кода сюда
11.
Николай (27.07.2010 / 00:42)
10.
Basters,
$data = array_unique ( $data );
if ( mysql_num_rows ( mysql_query ( "SELECT `num` FROM `mobi` WHERE `num`=".implode (', ', $data)) ) == 0 )
mysql_unbuffered_query ( "INSERT INTO `mobi` SET `num`='".implode (', ', $data)."'" );
12.
Женек (27.07.2010 / 00:45)
<?
$data = array_unique ( $data );
if ( mysql_num_rows ( mysql_query ( "SELECT `num` FROM `mobi` WHERE `num`=".implode (", ", $data)) ) == 0 )
mysql_unbuffered_query ( "INSERT INTO `mobi` SET `num`='".implode (", ", $data)."'" );
?>
13.
Lugaro (27.07.2010 / 00:59)
толе я автора не понял толе вы ему ерунду какую то пишете, всё данные запишет в одну строку, а ему каждый элемент массива по отдельности нужно записать, если я прав, то в цыкле пусть генерирует один большой insert into tableName (num) value(..),(..),(..) и судя из кода ему нужны только уникальные значения, значить проверка на существование там нафиг не нужна, поле num укажи как UNIQUE
14.
Женек (27.07.2010 / 01:25)
13.
.::lugaro::., то что я ему написал должно все занести нормально, без цикла, отдельно, а не в строку, автор, пробуй последнее, что я написал
15.
Lugaro (27.07.2010 / 01:31)
Basters (27 Июля 2010 / 00:25)
13. .::lugaro::., то что я ему написал должно все занести нормально, без цикла, отдельно, а не в строку, автор, пробуй последнее, что я написал
Как оно занесет все отдельно ? 0_о
Функция implode сбивает массив в одну строку
$arr = array(1,2,3);
echo "INSERT INTO `mobi` SET `num`='".implode (", ", $arr)."'";
В результате будет INSERT INTO `mobi` SET `num` = '1,2,3' каки образом оно по отдельности будет записываться?
16.
Олег (27.07.2010 / 02:02)
<?php
$data = array(1,2,3);
$data = array_unique ($data);
$str = "INSERT INTO `mobi` (blablabla) VALUES ";
foreach ( $data AS $mobile )
{
if ( mysql_num_rows ( mysql_query ( "SELECT `blablabla` FROM `mobi` WHERE `blablabla`=".$mobile) ) == 0 )
{
$str .= " ($mobile),";
}
}
echo rtrim($str,",").';';
?>
17.
Lugaro (27.07.2010 / 02:15)
Автор если в поле Num хранятся только уникальные значения, ставь пулю значение UNIQUE и убирай с 16 поста
if ( mysql_num_rows ( mysql_query ( "SELECT `blablabla` FROM `mobi` WHERE `blablabla`=".$mobile) ) == 0 )
ускорит процентов на 70 ато и больше
18.
Олег (27.07.2010 / 02:22)
было бы неплохо структуру таблицы посмотерть
19.
Константин (27.07.2010 / 04:01)
Все по идее должно работать, но в базу данные не добавляет.
20.
Олег (27.07.2010 / 05:10)
HOUSTON, как это понимать? Можно хотя бы тут привести результат mysql_error();
Возможно, у тебя есть в таблице поля, которым следует обязательно указывать значения.
Для этого, я кстати структуру таблицы попросил, которую ты так и не привел.
21.
Женек (27.07.2010 / 12:05)
15.
.::lugaro::., так же как и читаться через имплоуд
22.
Олег (27.07.2010 / 12:24)
Basters, глупости
23.
Lugaro (27.07.2010 / 13:46)
21.
Basters, возьми проверь...
24.
Женек (27.07.2010 / 14:40)
Сейчас нет возможности, ну нет, так нет
25.
Константин (27.07.2010 / 15:13)
20, точно я и не подумал, наверн из за этого, в таблице mobi такая структура
id(Autoincrement)|num(int)
26.
Константин (27.07.2010 / 15:24)
и active по умолчанию 0
27.
Александр (27.07.2010 / 15:30)
Атор юзай LIMITы,
SELECT *.... LIMIT 20 --зпарос выведет первые 20 записей.
или SELECT *.... LIMIT 20,40-- начиная с 20 по 40
В полях по которых часто идёт выборка юзай индексы,
KEY `username`(`username`)
к примеру.
28.
Олег (27.07.2010 / 15:33)
HOUSTON, всекции INTO(..) указывай все поля, соответсвенно в секции VALUES(...)
URL:
https://visavi.net/topics/11937