Βοήθεια με SQL query

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
stratosnikolaidis
Δημοσιεύσεις: 1
Εγγραφή: 18 Αύγ 2012 21:11
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Βοήθεια με SQL query

Δημοσίευση από stratosnikolaidis » 18 Αύγ 2012 21:14

Λοιπόν... καλησπέρα κι από μένα. Έχω ένα php script που πάει να εκτελέσει το εξής query:

Κώδικας: Επιλογή όλων

$queryResults_tecdoc = 'select distinct
  -1*art_id id_product, art_sup_id id_supplier, \'-1\' id_manufacturer, 1 id_tax_rules_group, 
  -1 id_category_default,-1 id_color_default, 1 on_sale, 0 online_only, 
  arl_display_nr ean13, 0 upc, 0 ecotax, 0 quantity, 0 minimal_quantity,  9999 price, 
  9999 wholesale_price, 1 unity, 1 unit_price_ratio, 0 additional_shipping_cost, 
  art_article_nr reference, art_article_nr supplier_reference, \'\' location, 0 width, 
  0 height, 0 depth, 0 weight, 0 out_of_stock, 0 quantity_discount, 0 customizable, 
  0 uploadable_files, 0 text_fields, 1 active, 1 available_for_order, \'new\' `condition`, 
  1 show_price, 0 indexed, 0 cache_is_pack, 0 cache_has_attachments, 0 cache_default_attribute, 
  \''._TECDOC_DATE_.'\' date_add, \''._TECDOC_DATE_.'\' date_upd, ga_id, 
  bnb_get_article_image(art_id, la_id) image_path, art_id, bnb_get_article_info(art_id, la_id) `description`,
  -1 mtrl,arl_display_nr description_short, null available_now, null available_later, 
  null link_rewrite, trim(concat(ga_standard_des, \' \', art_des)) name,23 rate, -1 id_image, 
  trim(concat(ga_standard_des, \' \', art_des)) legend, sup_brand manufacturer_name
from tof_article_ga
  left outer join tof_art_lookup on arl_art_id = art_id AND arl_kind = \'5\'
  join tof_link_art on la_art_id = art_id
  join tof_suppliers on art_sup_id=sup_id
where art_id '.$tecdocPool.'
  limit '.&#40;int&#41;&#40;&#40;&#40;count&#40;$idz_tecdoc&#41; - &#40;int&#41;$pageSize&#41; < 0 ? 0 &#58; &#40;count&#40;$idz_tecdoc&#41; - &#40;int&#41;$pageSize&#41;&#41;&#41;.','.&#40;int&#41;$pageSize;
Λοιπόν... το ποιες εγγραφές θα έρθουν από αυτό το query, ορίζονται στην μεταβλητή $tecdocPool.

Αυτή (η $tecdocPool) γεμίζει από τις τιμές ενός πίνακα, του $idz_tecdoc.

Το πρόβλημά μου ξεκινάει από το ότι υπάρχει περίπτωση, ο πίνακα $idz_tecdoc μπορεί να έχει 5-6 εγγραφές, οπότε το $tecdocPool να είναι μικρό στο μέγεθος (πχ. "in (2,6,10,45,32,99)") αλλά μπορεί να είναι και μεγάλο (πχ. μου έτυχε περίπτωση, ο πίνακας να έχει κάπου στις 6-8.000 εγγραφές, με αποτέλεσμα, το $tecdocPool να γίνει τόσο μεγάλο, σε σημείο που θα φρακάρει (τοπικά τουλάχιστον, το string έχει ένα όριο της τάξης των 4Kb).

Σε ένα προηγούμενο σημείο, όπου κάνω ορισμένους ελέγχους, τρέχω το query τμηματικά, ανά 200 εγγραφές (στο παράδειγμα που έτρεχα, είχε κάπου στις 85.000 εγγραφές).

Αλλά στο σημείο αυτό, εμπλέκεται το limit και φυσικά, κάποια πιθανή ταξινόμηση.

Κάποιο hint για το τι θα μπορούσα να κάνω;

Σας ευχαριστώ εκ των προτέρων.
Στράτος Νικολαΐδης

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Βοήθεια με SQL query

Δημοσίευση από gvre » 18 Αύγ 2012 22:07

Θα πρέπει να αντικαταστήσεις το $tecdocPool με ένα subselect. πχ

WHERE art_id IN (SELECT art_id FROM ...)

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης