sql select

Programovacie jazyky, rady, poradňa...
KViki
Light Expert
Light Expert
Príspevky: 74
Registrovaný: 06 dec 2008, 3:25
Kontaktovať používateľa:

sql select

Príspevok od používateľa KViki »

v tabulke mam 5 stlpcov

Kód: Vybrať všetko

id_order_history 	id_employee 	id_order 	id_order_state 	date_add
Taketo udaje

Kód: Vybrať všetko

           1	0	1	1	2010-10-02 00:05:33
 	 	 	2	0	2	3	2010-10-02 00:37:56
 	 	 	3	0	2	9	2010-10-02 00:37:56
 	 	 	4	1	2	11	2010-10-02 16:33:58
 	 	 	5	1	2	4	2010-10-02 16:34:01
 	 	 	6	1	2	9	2010-10-02 16:34:05
 	 	 	7	1	2	9	2010-10-02 16:34:07
 	 	 	8	0	3	3	2010-10-02 16:43:53
 	 	 	9	0	3	9	2010-10-02 16:43:54
 	 	 	10	1	2	4	2010-10-02 16:45:01
 	 	 	11	1	3	4	2010-10-02 16:45:07
 	 	 	12	1	1	9	2010-10-02 17:04:42
 	 	 	13	1	2	9	2010-10-02 17:04:52
 	 	 	14	1	2	6	2010-10-02 17:33:56
 	 	 	15	1	2	9	2010-10-02 17:34:04
 	 	 	16	1	2	10	2010-10-02 17:35:13
 	 	 	17	1	1	11	2010-10-02 17:35:18
 	 	 	18	1	2	9	2010-10-02 18:21:39
 	 	 	19	1	2	1	2010-10-02 18:36:15
 	 	 	20	1	1	9	2010-10-02 18:37:05
A potrebujem taky select ktory mi s tejto tabulky bude vytahovat tie id_order ktore budu mat id_order_state == '9'
ale iba pokial maju najnovsi datum aktualizacie resp. pokial maju navysie id_order_history svojej objednavky id_order

pomozte pls
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa c-ice »

"tabulka" = nazov tejto tabulky ktorej strukturu si tu popisal

Kód: Vybrať všetko

SELECT a.id_order FROM tabulka a
WHERE a.id_order_state = 9 
AND id_order_history = max(SELECT b.id_order_history FROM tabulka b WHERE b.id_order = a.id_order) )  
ak to chces podla datumu>>>

Kód: Vybrať všetko

SELECT a.id_order FROM tabulka a
WHERE a.id_order_state = 9 
AND a.date_add = max(SELECT b.date_add FROM tabulka b WHERE b.id_order = a.id_order) )  
PS: Tu anglictinu na nazvy stlpcov musis pouzivat ? nemyslis ze jednoduchsie by to bolo "poslovenčene" ? + rychlejsie citatelne by to bolo keby "id" pridavas ako postfix a nie ako prefix .... ale ak to neje tvoja tabulka tak nic potom
KViki
Light Expert
Light Expert
Príspevky: 74
Registrovaný: 06 dec 2008, 3:25
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa KViki »

hej presne,. neni to moja tabulka.

a vypisuje to chybu
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT b.id_order_history FROM xxx_order_history b WHERE b.id' at line 4
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa c-ice »

zátvorka nazvyš ?
KViki
Light Expert
Light Expert
Príspevky: 74
Registrovaný: 06 dec 2008, 3:25
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa KViki »

nie to som si vsimol hned.,
franta86
Light Expert
Light Expert
Príspevky: 42
Registrovaný: 11 aug 2009, 12:13

Re: sql select

Príspevok od používateľa franta86 »

SELECT id_order FROM tabulka
WHERE id_order_state = 9
AND date_add = max(SELECT date_add FROM tabulka)

???
KViki
Light Expert
Light Expert
Príspevky: 74
Registrovaný: 06 dec 2008, 3:25
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa KViki »

dik za pomoc...

toto je ten dotaz co som sa pokusal dosiahnut:

Kód: Vybrať všetko

select * from test_a where id_order_history in (
select max(id_order_history) from test_a group by id_order
) and id_order_state = 9
//autoeditácia príspevku (13 Sep 2011, 11:26)
Tento posledný dotaz doteraz fungoval, ale nastal problém s tím že sa zväčšila databáza a ten dotaz prestal má problémy s dokončením. Hlásy chybu

MySQL hlási:

#2006 - MySQL server has gone away

na serveri pri vykonaní skriptu napíše len

Server shutdown in progress


Vie niekto kde by mohol byť problém ?
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa c-ice »

no treba optimalizovat ... trva to dlhsie ako 30sekund ? (lebo MySQL aj Apache maju nastavenia kolko maximalne sa mozu vykonavat Dotazy a cakanie na DB a tak ... default je asi 30s) a kolko tych dat mas ? viac ak 1 000 000 zaznamov ?

skus najprv spravit Indexy nad stlpcami "id_order_history", "id_order_state", "id_order"
KViki
Light Expert
Light Expert
Príspevky: 74
Registrovaný: 06 dec 2008, 3:25
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa KViki »

Práveže to netrvá dlho, pár sekúnd maximálne 5s a vypiše jednu s tých chýb podľa toho či som v phpmyadmin alebo na stránke. A ešte je divné že niekedy sa ten skript dokončí.
V tejto dotyčnej tabulke je prave este malo zaznamov, nieco cez 10 000. neviem si to vysvetlit

indexi nepomohli

//autoeditácia príspevku (13 Sep 2011, 12:06)
na testovacej tabulke kde je cca 2200 zaznamov, sa dopyt vykonal za 0,001s
a ani raz nevypisalo tu chybu
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa c-ice »

KViki napísal:dik za pomoc...

toto je ten dotaz co som sa pokusal dosiahnut:

Kód: Vybrať všetko

select * from test_a where id_order_history in (
select max(id_order_history) from test_a group by id_order
) and id_order_state = 9

Kód: Vybrať všetko

SELECT * 
FROM test_a 
WHERE id_order_history IN (
   SELECT max(id_order_history) 
   FROM test_a
   WHERE id_order_state = 9 
   GROUP BY id_order)
skor ho mas takto nie ? lebo tam ten nefunguje tak ako si chcel ...
KViki
Light Expert
Light Expert
Príspevky: 74
Registrovaný: 06 dec 2008, 3:25
Kontaktovať používateľa:

Re: sql select

Príspevok od používateľa KViki »

obidva mi hlasia tu istu chybu, ten prvy som mal doteraz

//autoeditácia príspevku (13 Sep 2011, 17:43)
Moje uplne strasne ale funkcne riesenie toho mojho problemu

Kód: Vybrať všetko

$i = 0;
$ii = 0;
$query = "SELECT id_order
FROM ps_order_history 
WHERE  `id_order_state` =9

	";
  $result = mysql_query($query) or die(mysql_error());
 while($row = mysql_fetch_array( $result )) { 
$pole_order[$ii]=$row['id_order'];
$ii++;
}
foreach ($pole_order as &$value) {
	$query = "SELECT id_order, `id_order_state`
FROM ps_order_history 
WHERE `id_order` = ".$value." 
ORDER BY `id_order_history` DESC LIMIT 1

	";
  $result = mysql_query($query) or die(mysql_error());
 while($row = mysql_fetch_array( $result )) { 
 $status = $row['id_order_state'];
if( $status == 9){
$orderpole[$i]=$row['id_order'];
$i++;
}


}
}
sorien
Medium Expert
Medium Expert
Príspevky: 88
Registrovaný: 02 jún 2011, 21:55

Re: sql select

Príspevok od používateľa sorien »

#2006 - MySQL server has gone away
Vie niekto kde by mohol byť problém ?
server bude treba trosku prenastavit ... odpojit connection moze z viacerych pricin od nadmerneho zatazenia az po chybu v tabulke

1. http://dev.mysql.com/doc/refman/5.0/en/check-table.html
2. http://dev.mysql.com/doc/refman/5.0/en/ ... table.html

ak to nepomoze tak napriklad

4. nastavit v php.ini mysql.connect_timeout, default_socket_timeout

alebo

5 . my.cnf (mysql config) pohrat sa s tymito hodnotami
max_connections, max_connect_errors, connect_timeout, interactive_timeout, wait_timeout, key_buffer, max_allowed_packet, read_buffer_size, read_rnd_buffer_size, query_cache_size, query_cache_limit, query_cache_type
Napísať odpoveď