kapec gan ne Posted May 22, 2011 Report Share Posted May 22, 2011 category 1 id name 1 1 AAAA 1 2 BBBB names 1 id c_id name 1 1 1 AAA 1 2 1 BBB 1 3 2 CCC 1 4 2 DDD 1 5 1 EEE 1 6 2 FFF c_id = id tabulā category $search = 'BBBB'; $q_search = '%'.$search.'%'; $req = mysql_query("SELECT COUNT(*) FROM `names`...;"); $total = mysql_result($req,0); $res = mysql_query("SELECT names.*, category.name FROM names LEFT JOIN category ON names.c_id=category.id WHERE category.name LIKE '".mysql_real_escape_string($q_search)."' ORDER BY category.name ASC"); vēlos meklēt tabulā names pēc category.name, tikai nav saprašanas kā tas izdarāms :| nekad nav bijusi saskaršanās count kopā ar left join vai like ar left join Link to comment Share on other sites More sharing options...
xPtv45z Posted May 22, 2011 Report Share Posted May 22, 2011 Priekš kam tev LEFT JOIN? Link to comment Share on other sites More sharing options...
kapec gan ne Posted May 22, 2011 Author Report Share Posted May 22, 2011 (edited) nezinu, laikam tāpec, ka meklē jau pēc nosaukuma, ne jau pēc konkrēta kategorijas id.. no sākuma, tad drošvien vajadzētu atrast pašas kategorijas ar like un tad ņemties pa names tabulu? :} ja to var izdarīt vienā selectā, tad labprāt uzzinātu kā Edited May 22, 2011 by kapec gan ne Link to comment Share on other sites More sharing options...
Gints Plivna Posted May 22, 2011 Report Share Posted May 22, 2011 Labāk jau nu pasaki ko vajag. Vēl jo vairāk tāpēc, ka name ir gan iekš category, gan names tabulas. Tātad apmēram tā: - KO īsti grib atrast - kategorijas vai nosaukumus? (ņemot vērā, ka vienai kategorijai ir vesels bars nosaukumu) - kurā laukā meklē? - ko grib redzēt (kolonas) rezultātu sarakstā (atkal atceramies, ka vienai kategorijai ir N nosaukumi)? Gints Plivna http://datubazes.wordpress.com Link to comment Share on other sites More sharing options...
kapec gan ne Posted May 22, 2011 Author Report Share Posted May 22, 2011 gribu atrast visus ierakstus no tabulas names kuriem kategorijas nosaukums atbilst meklētajam.. kurā laukā meklēt? drošvien ka vajadzētu 1 select ielikt (select name from category where id=c_id) as category_name iekš querijā un tad arī pēc tā category_name meklēt !? gribu redzēt tos pašus ierakstus no tās pašas tabulas kuriem kategorijas nosaukums atbilda meklētajam.. izskatās ka nepadomāju līdz galam ^^ Link to comment Share on other sites More sharing options...
Gints Plivna Posted May 22, 2011 Report Share Posted May 22, 2011 (edited) Paga, bet tad kas tieši tai tavā esošajā vaicājumā nav OK? Jo spriežot pēc tā ko esi uzrakstījis vārdiem un arī SQLā, tie abi sakrīt. gribu atrast visus ierakstus no tabulas names kuriem kategorijas nosaukums atbilst meklētajam mysql> SELECT names.*, category.name -> FROM names LEFT JOIN category ON names.c_id=category.id -> WHERE category.name LIKE '%BBBB%' -> ORDER BY category.name ASC; +------+------+------+------+ | id | c_id | name | name | +------+------+------+------+ | 3 | 2 | CCCC | BBBB | | 4 | 2 | DDDD | BBBB | | 6 | 2 | FFFF | BBBB | +------+------+------+------+ 3 rows in set (0.00 sec) Tiesa gan LEFT [OUTER] JOIN tur ir bezjēdzīgs, tikpat labi varētu lietot arī INNER JOIN, jo ar to WHERE klauzu priekš ārējās tabulas vairs nekāds ārējais savienojums tāpat nesanāk, viss ir kā parasts savienojums. Gints Plivna http://datubazes.wordpress.com P.S. Ā tur figurēja kaut kāds count(*), tikai es īsti neiebraucu kādā veidā un kur tam vajadzētu parādīties? Edited May 22, 2011 by Gints Plivna Link to comment Share on other sites More sharing options...
kapec gan ne Posted May 22, 2011 Author Report Share Posted May 22, 2011 (edited) ar count vajadzētu iegūt ierakstu skaitu, lai varētu visu smuki sadalīt lapā ar LIMIT un uzlikt lapas navigāciju un lai vienā lapā nebūtu simtiem ierakstu :} EDIT:vispār problēma bija izvadē) while($row=mysql_fetch_array($row)) biju nokļūdījies un nevarēju iebraukt kur kļūda bet ar COUNT(*) gan nezinu Edited May 22, 2011 by kapec gan ne Link to comment Share on other sites More sharing options...
Gints Plivna Posted May 23, 2011 Report Share Posted May 23, 2011 MySQL dokumentācija un google ir Tavs draugs. Ja pirmajā linkā pēc šī googles vaicājuma man iedeva vajadzīgo info, kaut gan godīgi atzīstos šo tīri MySQL specifisko f-ju nebiju zinājis. mysql> SELECT SQL_CALC_FOUND_ROWS names.*, category.name -> FROM names LEFT JOIN category ON names.c_id=category.id -> WHERE category.name LIKE '%BBBB%' -> ORDER BY category.name ASC -> LIMIT 2, 1; +------+------+------+------+ | id | c_id | name | name | +------+------+------+------+ | 3 | 2 | CCCC | BBBB | +------+------+------+------+ 1 row in set (0.00 sec) mysql> SELECT found_rows(); +--------------+ | found_rows() | +--------------+ | 3 | +--------------+ 1 row in set (0.00 sec) Otra iespēja, protams ir rakstīt 2 sql teikumus - pirmais vienkārši count(*) select listā bez citām kolonām un bez limit - otrais kā jau sākumā bija. Jā un vēl tā tava pieeja - % priekšā meklējamai simbolu virknei ir absolūts potenciāls ātrdarbības killeris. Nupat vēl pirms mēneša minēju to savā prezentācijā. Nu protams, ja tev ir 5 ieraksti un 3 vaicājumi dienā, tad tas nav svarīgi, bet lielākām lietām silti iesaku tā nedarīt. Gints Plivna http://datubazes.wordpress.com Link to comment Share on other sites More sharing options...
kapec gan ne Posted May 23, 2011 Author Report Share Posted May 23, 2011 (edited) par ātrdarbību neuztraucos.. paldies par konsultāciju :) Edited May 23, 2011 by kapec gan ne Link to comment Share on other sites More sharing options...
Recommended Posts