Как можно ускорить работу с 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