Sh4dow
29.01.2004, 16:37:01
Pytanie jest proste czy da sie polaczyc w jednym zapytaniu SELECT i INSTER ?
A tutaj model na ktorym chce to zrobić.
Najpierw pytam o id usera
[sql:1:1cf29f53c5]SELECT id FROM users WHERE level = '1'[/sql:1:1cf29f53c5]
i przy wyciaganiu kolejnych numerow ID users skrypt wykonuje INSTER do innej tabeli
[sql:1:1cf29f53c5]INSERT INTO msg_wiadomosci (od, do, temat, tresc) VALUES ('$user', '$wynik['id']', '$_POST['temat']', '$_POST['tresc']');[/sql:1:1cf29f53c5]
W tabeli users mam ponad 5000 userow wiec przy wysyalaniu wiadomosci do wszystkich userow skrypt zapetli sie ponad 5000 razy co zmasakruje baze. moze mysql ma mozliwosc samemu wykonania takiej operacji.
stach
29.01.2004, 16:47:44
tak da sie:
[sql:1:33bd8cfb3e]INSERT INTO msg_wiadomosci (od, do, temat, tresc) SELECT kolumna_od, kolumna_do, kolumna_temat, kolumna_tresc FROM tabela;[/sql:1:33bd8cfb3e]
i jesli jeszcze ma byc to zalezne od info z innej tabeli to uzywasz [sql:1:33bd8cfb3e]JOIN[/sql:1:33bd8cfb3e].
Sh4dow
29.01.2004, 16:56:48
stale wartosci to kolumny od, temat i tresc, zmienia sie tylko komumna do ktora jest brana z tabeli users
P.S. Mozesz mi napisac dokladnie jak ma wygladc zapytanie od a do z ? Bede wdzieczny
stach
29.01.2004, 20:21:52
[sql:1:98f6b15efa]INSERT INTO msg_wiadomosci (od, do, temat, tresc) SELECT kolumna_od, id, kolumna_temat, kolumna_tresc FROM tabela_gdzie_sa_stale JOIN users;[/sql:1:98f6b15efa]
Albo
[sql:1:98f6b15efa]INSERT INTO msg_wiadomosci (od, do, temat, tresc) SELECT tabela_gdzie_sa_stale.kolumna_od, users.id, tabela_gdzie_sa_stale.kolumna_temat, tabela_gdzie_sa_stale.kolumna_tresc;[/sql:1:98f6b15efa]
No i jeszcze trzeba / mozna jakos tam WHERE wrzucic odpowiednio dostosowane do potrzeb.
Sh4dow
29.01.2004, 20:58:30
No dobra, ale z bazy chce pobrac tylko jedna kolumne (do) inne kolumny (od, temat, tresc) brane sa z formularza. Wiec mam stworzyc tablice temp i tam zaladowac tymczasowo dane z formularza?
Bo chyba innego wyjscia nie ma ?
spenalzo
29.01.2004, 21:30:46
Jest inne wyjście:
[php:1:b2f7da3d15]<?php
// pobieramy wszystkie ID i wrzucamy do tablicy
$q=mysql_query("SELECT id FROM users WHERE level = '1' ");
while($t=mysql_fetch_array($q))
{
$tmp[]=$t["id"];
}
// tworzymy liste wartosci pol
// nie wiem czy dobrze podstawione $user
foreach($tmp AS $user)
{
$sql[]="('".$wynik['id']."', '".$user."', '".$_POST['temat']."', '".$_POST['tresc']."')";
}
// zlaczamy liste wartosci
$sql=implode(", ",$sql);
// wykonujemy zapytanie
mysql_query("INSERT INTO msg_wiadomosci (od, do, temat, tresc) VALUES ".$sql);
?>[/php:1:b2f7da3d15]
Sh4dow
30.01.2004, 23:39:06
Spenalzo twoja wersja dziala jak najbardziej poprawnie i sniga tak jak trzeba :]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.